今天在写代码时遇到了这样一个错误:
error: must use ‘class’ tag to refer to type ‘XXX’ in this scope
上面的这个XXX是一个类的类名。
搜来搜去也没找到原因,经过一段时间的折腾我发现了问题所在:其本质是同一个关键字被两次声明造成的。
复现案例如下:
在类A之前声明了一个函数A,最后在类B中声明一个类A的对象并调用A的构造函数。
//classStudy.cpp
#include <stdio.h>
void A()
{
}
class A
{
public:
A(){}
~A(){}
};
class B
{
public :
B(){}
~B(){}
void C()
{
A *a = new A(); //问题所在
}
};
int main()
{
return 0;
}
使用g++指令编译时会出现如下错误:
解决方法是按编译器建议将22行写成这样:
class A *a = new (class A)();
通常情况下我们会遇到的问题是同一个关键字被两次声明成同一个变量,造成变量名冲突,这里的这个问题的本质其实也是一样的,解决方法之一是更换关键字,另一个办法是使用class清楚地指定调用关键字的位置是一个类。
PS: struct也会出现类似的情况。