以前一直以为,在C++中定义了结构体类型后,可以直接这样用:
struct T
{};
int main()
{
T p;
return 0;
}
但今天遇到一个问题,如果代码中还有一个与自定义类型同名的函数,还可以这样用吗?
struct T
{};
void T()
{}
int main()
{
T p; //MinGW的编译结果:9:7: error: expected ';' before 'p'
return 0;
}
结果编译器报错,缺少“;”(在标识符“p”的前面)。在这里,估计是函数T()把struct T给屏蔽了,即编译器不会把T看成是自定义类型。
解决方法也很简单,就是用回C语言定义结构体变量的方法:
struct T
{};
void T()
{}
int main()
{
struct T p; //显式声明了T为自定义类型
return 0;
}
以上方法也适用于class,在我看来,class和struct本为一体,只是默认访问属性不同而已:
class T
{};
void T()
{}
int main()
{
class T p; //显式声明了T为自定义类型
return 0;
}