在我的C项目中,我有一个带有结构声明(带别名)的头文件和一个带有接受该结构作为参数的函数的头文件(使用别名)。我在函数上收到错误expected ')' before '*' token
。从研究开始,我认为这表明别名在函数的命名空间中是不可见的。我有一个相当复杂的include
网络,我认为可能会导致这种情况。这是一个简化的例子。
结构声明标题:
#ifndef STRUCTHEADER_H_
#define STRUCTHEADER_H_
#endif /* STRUCTHEADER_H_ */
#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif
struct myStruct{
};
typedef struct myStruct mys;
结构函数标题:
#ifndef STRUCTFUNCTIONS_H_
#define STRUCTFUNCTIONS_H_
#endif /* STRUCTFUNCTIONS_H_ */
#ifndef STRUCTHEADER_H_
#include "structHeader.h"
#endif
void func(mys* s);
main.c中:
#ifndef STRUCTHEADER_H_
#include "structHeader.h"
#endif
int main(int argc, char* argv[]){
return 0;
}
但是,当我将main.c更改为:
#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif
int main(int argc, char* argv[]){
return 0;
}
错误消失了。我使用include
错了吗?
答案 0 :(得分:0)
您需要更改structHeader.h
,以便在它包含structFunctions.h
之前声明结构,因为函数定义需要引用别名。在C中,您只能引用先前声明的名称。
#ifndef STRUCTHEADER_H_
#define STRUCTHEADER_H_
#endif /* STRUCTHEADER_H_ */
struct myStruct{
};
typedef struct myStruct mys;
#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif