具有相同类型名称的成员

Member with the same name of the type

本文关键字:成员 同类型      更新时间:2023-10-16

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

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

然而,编译器不允许我这样做。我试图将成员返回类型的类型更改为::A(正如这里所建议的,但没有成功。我知道我可以只更改成员名称,但我只想了解为什么它有这个限制,以及我的解决方法。

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

更正后的代码看起来像:

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

修复了代码板上的代码:

http://codepad.org/cilF9rKm

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

例如,如果你在B中有一个方法说

A x = A();

无论您是在调用B::A()还是在构造一个新的a对象,都是不明确的。