2013-11-16 4 views
2

У меня возникли проблемы с моим кодом, чтобы преобразовать из «недействительным *» до «NODE *»не удается преобразовать из «недействительным *» до «узла *»

Может кто-нибудь помочь мне обойти эту проблему?

NODE *list_create(void *data) 
{ 
NODE *node; 
if(!(node = malloc(sizeof(NODE)))) return NULL; 
node->data=data; 
node->next=NULL; 
return node; 
} 

Я получаю ошибку прямо под знаком =. Любая помощь будет принята с благодарностью!

+3

Какая ошибка? Может быть, вы используете компилятор C++ вместо компилятора C. – sgarizvi

+1

Нет компилятора C будет жаловаться на отсутствие приведения в задании; каждый компилятор C++ будет жаловаться на отсутствие перевода в задании. Поэтому вы должны начать компилировать свой код с помощью компилятора C, а не с компилятором C++, потому что вы будете путать каждый раз, когда компилятор жалуется на что-то, что является законным на C, но незаконным на C++. Использование неправильного компилятора - серьезная проблема. (Вы работаете в Windows, возможно?) –

ответ

1

Вы не указали ошибку, но при условии, от взглядов коды, наиболее вероятна ошибка преобразования типа, что-то вроде:

Невозможно преобразовать недействительным * в NODE *

вопрос помечен C и код, написанный здесь также действует C, но недопустимый C++. Поэтому, если есть ошибка, можно с уверенностью предположить, что компилятор C++ используется для компиляции кода.

Для удаления ошибки используйте C-компилятор; или если вы хотите придерживаться компилятора C++, явно введите cast, возвращаемое значение malloc.

if(!(node = (NODE*)malloc(sizeof(NODE)))) return NULL; 
+0

Если вы используете компилятор C++, было бы лучше придерживаться написания кода на C++, используя собственные идиомы C++. Хотя C++ поддерживает 'malloc()', это не обычный способ выделения памяти на C++ - вы должны использовать 'new' и' new [] 'и связанные с ним идиомы. –

+0

@JonathanLeffler ... Да, я бы также рекомендовал использовать 'new' вместо' malloc', но я хотел оставаться рядом с кодом OP. – sgarizvi

+0

Это заставило ошибку уйти. Спасибо. Что касается использования компилятора C, я просто использую Microsoft Visual C++ 2010 Express. Это было бесплатно от Microsoft. Есть ли другая бесплатная программа, которая предназначена только для C? – mebrunner24

0
if(!(node = malloc(sizeof(NODE)))) return NULL; 

malloc возвращает указатель void (так как он не знает, что вы хотите сделать с памятью вы просили.

компилятор пытается выяснить, почему вы хотите, чтобы память. Cast это к (NODE *), чтобы дать ему подсказку

Смежные вопросы