我想创建一个与返回类型同名的成员函数。例子:
class A { };
class B {
public:
A& A() { return *a; }
private:
A* a;
};
但是,编译器不会让我这样做。我试图将成员返回类型的类型更改为::A
(as sugested here,但无济于事。我知道我可以更改成员名称,但我只想了解为什么它有这个限制,以及我的解决方法是什么.
如果您声明一个名为的成员,A
您将无法再使用A
没有显式命名空间的类型。您需要将每次出现的类型 A 更改为::A
.
更正后的代码如下所示:
class A { };
class B {
public:
::A& A() { return *a; }
private:
::A* a;
};
那是因为与类同名的成员是构造函数。但是,您尝试使用类型声明一个,这是一个错误。您只能按照语言想要的方式定义构造函数(没有明确的返回类型)。
例如,如果你有一个方法B
说
A x = A();
无论您是在调用B::A()
还是在构造一个新的 A 对象,都是模棱两可的。