以下是VS2012中失败的一些代码:
class A;
class B
{
bool A();
A member; // Error: function B::A is not a type name
};
为什么这不起作用?显然,我正在尝试创建类型为A
的成员,而不是类型为B:A()
的成员(这不是类型,正如编译器正确指出的那样)。有没有改变B:A()
或class A
名称的方法?我是否可以明确告诉编译器我希望member
属于class A
类型?
答案 0 :(得分:6)
有可能,您只需要明确表示要使用类 A
:
class A;
class B
{
bool A();
class A member;
};
答案 1 :(得分:3)
失败是因为它们共享一个命名空间。 C ++通常不能基于上下文区分类型和函数(A()
构造函数或函数调用)。您可以明确指出您所指的是哪一个,例如
class A;
class B
{
bool A();
::A member;
};