错误 C2146 的可能原因:语法错误:标识符前缺少";"
Possible reason for error C2146: syntax error : missing ';' before identifier
我正在做一个示例应用程序,我已经声明了一个结构体:
// 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;
}
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- Qt <winInet.h> 在构建时输出许多 C4430 和 C2146 错误
- 错误 C2146:语法错误:按函数传递映射时标识符 mType 之前缺少','
- 如何修复这些错误:C2146 和 C4430(在 C++ 中)
- 错误 C4430、C2146 - 缺少类型说明符 - 假定为 int.注意:C++不支持默认整数
- C++编译错误C2146和C4430
- C++ 错误 1 错误 C2146:语法错误:标识符'records'之前缺少';'
- 错误c2146:语法错误
- 奇怪的错误C2146和C4430在d3d11shader.h在VS2012
- 错误 C2146:语法错误:标识符'ContextRecord'之前缺少';'
- 错误 C2146 的可能原因:语法错误:标识符前缺少";"
- VC++ 错误 C2146:语法错误:标识符'pFirst'之前缺少')'
- 类和构造函数C++ - 错误和警告 C2146, C4430