我正在做一个示例应用程序,我已经声明了一个struct:
// common.h
typedef struct MyStruct
{
int a;
}
//sample.h
#include "common.h"
int main()
{
MyStruct st;// getting error here
}
C2146:语法错误:缺少';'在标识符之前
可能的原因是什么?
答案 0 :(得分:3)
两件事:
首先,在结构定义之后你缺少一个分号:
// common.h
typedef struct MyStruct
{
int a;
};
^
不是说这仍然是错误的。您需要修复其他错误。
其次,您应该像这样定义结构:
// common.h
typedef struct
{
int a;
} MyStruct;
或者,您可以这样定义:
// common.h
struct MyStruct
{
int a;
};
答案 1 :(得分:1)
几乎始终因为此时未定义类型MyStruct
,因为您包含错误的标头或类型规范因某种原因失败。
如果该typedef 完全您common.h
中的内容,则无效。它后面应该是别名类型和分号。或者您可能想要一个typedef,因为C ++允许您在源代码中将MyStruct
称为“正确”类型。
这样的事情很好:
struct MyStruct { int a; };
int main() {
MyStruct st;
return 0;
}
甚至是这样,显示出三种可能性:
struct MyStruct { int a; };
typedef struct MyStruct2 { int a; } xyzzy;
int main() {
MyStruct st;
MyStruct2 st2;
xyzzy st3;
return 0;
}
答案 2 :(得分:1)
您的"common.h"
标头未正确定义MyStruct
;它最后需要一个分号。
然后typedef
是空的;在C ++中,您不需要typedef
来定义类型MyStruct
。 (在C中,你需要写:
typedef struct MyStruct { int a; } MyStruct;
但是C ++并不要求 - 尽管它也不反对它。)
所以,写下来就足够了:
struct MyStruct { int a; };