为什么我不能有一个与成员类型同名的方法?

时间:2013-09-11 22:41:29

标签: c++ c++11

以下是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类型?

2 个答案:

答案 0 :(得分:6)

有可能,您只需要明确表示要使用 A

class A;

class B
{
    bool A();
    class A member;
};

答案 1 :(得分:3)

失败是因为它们共享一个命名空间。 C ++通常不能基于上下文区分类型和函数(A()构造函数或函数调用)。您可以明确指出您所指的是哪一个,例如

class A;

class B
{
    bool A();
    ::A member;
};