具有相同名称的成员

时间:2013-02-02 17:30:06

标签: c++

我想创建一个与返回类型名称相同的成员函数。例如:

class A { };

class B {
public:
    A& A() { return *a; }
private:
    A* a;
};

然而,编译器不会让我。我试图将成员返回类型的类型更改为::A(作为su here,但无济于事。我知道我可以更改成员名称,但我只是想了解它为什么会这样做有这个限制,我的解决方法是什么。

2 个答案:

答案 0 :(得分:2)

如果声明名为A的成员,则在没有显式名称空间的情况下,您将无法再使用类型A。您需要将类型A的每次出现更改为::A

更正后的代码如下:

class A { };

class B {
    public:
        ::A& A() { return *a; }
    private:
        ::A* a;
};

键盘上的固定代码:

http://codepad.org/cilF9rKm

答案 1 :(得分:0)

那是因为与该类同名的成员是构造函数。但是,您尝试使用类型声明一个,这是一个错误。您只能按语言需要的方式定义构造函数(没有显式返回类型)。

例如,如果您在B中有一个说

的方法
A x = A();

你是在调用B::A()还是正在构建一个新的A对象,这是不明确的。