错误C2146的可能原因:语法错误:缺少';'在标识符之前

时间:2011-10-18 04:28:52

标签: c++ compiler-errors

我正在做一个示例应用程序,我已经声明了一个struct:

 // common.h
 typedef struct MyStruct
 {
   int a;
 }

  //sample.h
  #include "common.h"
  int main()
  {
     MyStruct st;// getting error here
  }
  

C2146:语法错误:缺少';'在标识符之前

可能的原因是什么?

3 个答案:

答案 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; };