ошибка: ожидаемые спецификаторы объявления или «...» перед «list_node» - PullRequest
7 голосов
/ 15 февраля 2011

У меня есть файл catalog.h с этим

typedef struct node* list_node;
struct node
{
    operationdesc op_ptr;
    list_node next;
};

и файл parser.h с этим

#include "catalog.h"

int parse_query(char *input, list_node operation_list);

Оба заголовка имеют #ifndef, #define, #endif.Компилятор выдаёт мне эту ошибку: expected declaration specifiers or ‘...’ before ‘list_node’ в строке parse_query.В чем дело?Я попытался поместить typedef в parser.h, и это нормально.Почему я получаю эту ошибку, когда typedef находится в catalog.h?

Ответы [ 2 ]

6 голосов
/ 24 апреля 2012

Ошибка такая (из вашего комментария):

У меня был #include "parser.h" в catalog.h. Я удалил его, и теперь он компилируется нормально ...

Если предположить, что #include "parser.h" было до typedef в catalog.h, и у вас есть исходный файл, который включает catalog.h до parser.h, то в то время, когда компилятор включает parser.h, typedef недоступен еще. Вероятно, лучше переставить содержимое заголовочных файлов, чтобы у вас не было циклической зависимости.

Если это не вариант, вы можете убедиться, что любые исходные файлы, содержащие эти два файла, включают parser.h сначала (или только).

0 голосов
/ 05 июля 2011

Попробуйте это для catalog.h:

typedef struct node_struct {
     operationdesc op_ptr;
     struct node_struct* next;
} node;

typedef node* list_node;
...