1

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

class A { };

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

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

4

2 回答 2

2

如果您声明一个名为的成员,A您将无法再使用A没有显式命名空间的类型。您需要将每次出现的类型 A 更改为::A.

更正后的代码如下所示:

class A { };

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

键盘上的固定代码:

http://codepad.org/cilF9rKm

于 2013-02-02T17:40:05.517 回答
0

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

例如,如果你有一个方法B

A x = A();

无论您是在调用B::A()还是在构造一个新的 A 对象,都是模棱两可的。

于 2013-02-02T17:35:12.200 回答