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

Possible reason for error C2146: syntax error : missing ';' before identifier

本文关键字:错误 C2146 标识符 语法      更新时间:2023-10-16

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

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

C2146:语法错误:标识符

前面缺少';'

这可能的原因是什么?

两件事:

首先,在结构体定义后缺少一个分号:

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

并不是说这仍然是错误的。你需要修正另一个错误。

其次,您应该像这样定义结构体:
 // common.h
 typedef struct
 {
     int a;
 } MyStruct;

或者,您可以这样定义它:

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

您的"common.h"标头没有正确定义MyStruct;它需要在末尾加一个分号

typedef为真空;在c++中,您不需要typedef来定义类型MyStruct。(在C语言中,你需要写:

typedef struct MyStruct { int a; } MyStruct;

但是c++不要求这样做——尽管它也不反对这样做。)

所以,这样写就足够了:

struct MyStruct { int a; };

几乎总是,因为类型MyStruct在那时没有定义,要么是因为您包含了错误的头文件,要么是因为类型规范由于某种原因失败。

如果该类型定义是完全你在你的common.h,它不会工作。它应该后跟别名类型和分号。或者也许你不想一个typepedef,因为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;
}