我对编程很陌生,所以这可能是一个愚蠢的问题。
我试图将我的结构放在一个单独的头文件中但是当我这样做时,我收到了这个错误:
main.c | 3 |错误:预期';',标识符或'('之前' int' ===构建失败:1个错误,0个警告(0分钟,0秒(秒))===
这是来自 main.c 的代码:
#include "struct.h"
int main(void){
return 0;
}
这是 struct.h :
struct test{
int a;
}
答案 0 :(得分:2)
您的结构后缺少;
:
应该是
struct test {
int a;
};
答案 1 :(得分:1)
问题在#include
语句中不,而在 struct.h 文件本身。
您忘记在;
声明后添加struct
。
要引用,C11
标准,章节§6.7.2.1,结构和联合说明符,struct
声明的语法是
结构声明:
specifier-qualifier-list struct-declarator-list opt ;
请注意最后的;
。
因此,您的结构声明应该类似于
struct test {
int a;
}; // note the ; here
答案 2 :(得分:0)
在您的情况下,如其他答案所述,您在struct
声明后缺少分号。
当编译器看到
时,可能并不十分清楚#include "file.h"
它用file.h
的内容替换该行(包括换行符),但没有多少检查超出预处理能力。特别是file.h
不必自行编译。所以这个:
file1.h:
struct test{
int a;
file2.h:
};
并在file.c中
#include "file1.h"
#include "file2.h"
int main() { /* etc */ }
是完全合法的(虽然它看起来更像是一个混淆代码竞赛的条目)。
实际上,标准(无论如何都是C ++ 11)表明,如果包含文件没有以换行符结尾,则效果未定义,编译器可能(或可能不)加入最后一行包含文件与源代码的下一行,这可以带来各种乐趣。
这一点的长短 - 如果您在#include
之后立即在源代码中出现意外错误,请检查#include
文件的末尾是否有错误,因为这可能是问题所在是。
答案 3 :(得分:0)
在头文件struct.h
中,以分号结束结构。
您的代码应运行正常。
说明: -
结构具有以下语法: -
struct <structure-name> {
.
.
elements
.
.
}; // must end with semi-colon
并使用以下语法声明它的对象: -
struct <structure-name> <object-name>;
希望有所帮助。