error C2143: syntax error : missing ';' before 'tag::id'的两种情况
2008年10月23日 21:25
出现这种问题可能的情况有: 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这类错误,一般都是粗心造成的,所以编程是个细活,得细心了。 |