2014-12-30 3 views
1

Может кто-нибудь объяснить, почему я получаю ошибку компиляции ниже кода.Ошибка металирования компилятора для возвращаемого объекта функции возвращаемого объекта

Ошибка говорит:

"ожидается безоговорочную идентификатор до 'структуры'" на номер строки 7»

Мой код:.

struct node{ 
    int data; 
    struct node *left; 
    struct node *right; 
}; 

(struct node *) createNode(int num) 
{ 
    struct node *newNode; 
    newNode = (struct node *) malloc(sizeof(struct node)); 
    newNode->data = num; 
    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 
} 
+0

Является ли это C или C++? В этом случае у них разные правила, выберите язык. –

+3

Определите функцию без запуска paren, как 'struct node * createNode (int num) {' –

+1

, почему вы используете скобки для типа возврата? – vineetv2821993

ответ

5

изменение

(struct node *) createNode(int num) 

в

struct node * createNode(int num) 

Помните, что вы указываете тип возврата. Вы не typecast ing.

Это говорит,

  1. Пожалуйста see why not to cast возвращаемое значение malloc() и семьи в C.
  2. Всегда проверяйте для возвращаемого значения malloc() для успеха перед использованием возвращаемого указателя.
2

Функция: (struct node *) createNode(int num) недействительный синтаксис. Указатель на struct node* - это возвращаемый тип функции. Кажется, вы, возможно, подумали, что вы должны применить его к типу структуры. Это не обязательно. Кроме того, нет необходимости бросать malloc в C. Измените это на это.

struct node* createNode(int num) 
{ 
    /* ... */ 
} 

Не нужно, но, чтобы сэкономить на вводе struct каждый раз, еще лучше, вы можете определить новый тип с typedef.

typedef struct node Node; 

struct node{ 
    int data; 
    Node *left; 
    Node *right; 
}; 
2

При возвращении структуры вам не нужно указывать скобки для этого. Итак, вы просто даете

struct node * createNode(int num){ 
    ... 
    } 

Неправильное расположение кронштейнов.

0

Вам не нужно использовать круглые скобки в определении типа функции возврата. Я думаю, вы путать с определением функции здесь есть несколько ссылок: -

http://www.tutorialspoint.com/cprogramming/c_functions.htm

Для функции возвращающие указатели

http://www.tutorialspoint.com/cprogramming/c_return_pointer_from_functions.htm

Тип литья может быть только использовать для постоянной, переменной, функции вызывает (если что-то возвращает).

Явное правило преобразования типов: -

http://www.tutorialspoint.com/cprogramming/c_type_casting.htm

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