我有一个带有此
的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
。
编译器在parse_query行上给出了这个错误:expected declaration specifiers or ‘...’ before ‘list_node’
。
怎么了?
我试着把typedef放在parser.h中,没关系。当typedef在catalog.h中时,为什么会出现此错误?
答案 0 :(得分:6)
错误就是这个(来自你的评论):
我在catalog.h中有一个#include“parser.h”。我把它删除了,现在它正常编译......
假设#include "parser.h"
位于catalog.h
中的typedef之前,并且您在catalog.h
之前有一个包含parser.h
的源文件,那么当时编译器包含parser.h
1}},typedef尚不可用。 最好重新排列头文件的内容,这样就不会有循环依赖。
如果这不是一个选项,您可以确保包含这两个文件的所有源文件首先(或仅)包含parser.h
。
答案 1 :(得分:0)
试试catalog.h
:
typedef struct node_struct {
operationdesc op_ptr;
struct node_struct* next;
} node;
typedef node* list_node;