我想创建一个与返回类型名称相同的成员函数。例如:
class A { };
class B {
public:
A& A() { return *a; }
private:
A* a;
};
然而,编译器不会让我。我试图将成员返回类型的类型更改为::A
(作为su here,但无济于事。我知道我可以更改成员名称,但我只是想了解它为什么会这样做有这个限制,我的解决方法是什么。
答案 0 :(得分:2)
如果声明名为A
的成员,则在没有显式名称空间的情况下,您将无法再使用类型A
。您需要将类型A的每次出现更改为::A
。
更正后的代码如下:
class A { };
class B {
public:
::A& A() { return *a; }
private:
::A* a;
};
答案 1 :(得分:0)
那是因为与该类同名的成员是构造函数。但是,您尝试使用类型声明一个,这是一个错误。您只能按语言需要的方式定义构造函数(没有显式返回类型)。
例如,如果您在B
中有一个说
A x = A();
你是在调用B::A()
还是正在构建一个新的A对象,这是不明确的。