【问题标题】:Member with the same name of the type类型同名的成员
【发布时间】:2013-02-02 17:30:06
【问题描述】:

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

class A { };

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

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

【问题讨论】:

  • 为什么投反对票?这是一个合理的问题。
  • 因为问题基本上是“为什么 C++ 语言是这样设计的”,这不是一个实际的编程问题。答案不会神奇地使它合法。
  • 我还问了我的解决方法是什么,在下面得到了回答。我也认为尝试理解原因没有问题。网站常见问题解答说:“如果您提出问题的动机是“我想参加关于 ______ 的讨论”,那么您不应该在这里提问。但是,如果您的动机是“我希望其他人向 ______ 解释我”,那么你可能没事。”我相信我的问题符合第二个想法。
  • 我不明白为什么这也被否决了。这个问题是完整的,包含示例代码并询问如何修复。它甚至与一些分配无关,代码实际上只是问题的测试用例。

标签: c++


【解决方案1】:

如果你声明了一个名为A 的成员,你就不能再使用没有明确命名空间的A 类型。您需要将每次出现的类型 A 更改为 ::A

修正后的代码如下:

class A { };

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

键盘上的固定代码:

http://codepad.org/cilF9rKm

【讨论】:

  • 非常感谢,就这样!
【解决方案2】:

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

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

A x = A();

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

【讨论】:

  • 该成员具有不同的名称,并且不是构造函数。该类称为A,成员称为B
猜你喜欢
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多