|
出现这种问题可能的情况有: 1.定义的类最后的括号后面没有加;这是error C2143最简单的一种错误。 2.举例说明较隐蔽的一种情况: A.h: class A { A(); ~A(); typedef struct p{ int s; int t; }*q; static q ptr; }; A.cpp: ... #include "A.h" .... A::A() {} q A::ptr=NULL;//必须在类外初始化静态成员变量ptr .... 编译... 出错:error C2143: syntax error : missing ';' before 'tag::id' 咋一看什么问题也没有啊,类后面也有分号,头文件也包含了,这是怎么或事呢??? 细心一点地检查,你会发现初始化静态成员变量ptr的时候是在类外,那么q是什么?编译器自然不知道,所以q是类A的q,这里必须加上A::。改成A::q A::ptr=NULL后编译通过。 第二中情况比较隐蔽,曾让我抓狂好长时间。 总之,error C2143这类错误,一般都是粗心造成的,所以编程是个细活,得细心了。 |
本文介绍了C++编译时出现errorC2143的两种常见原因:一是类定义末尾缺少分号,二是静态成员变量外部初始化时类型标识不明。通过具体代码示例,帮助读者理解并避免这些错误。
6919

被折叠的 条评论
为什么被折叠?



