【问题标题】:C++ "invalid constructor"C++“无效的构造函数”
【发布时间】:2012-08-10 15:40:21
【问题描述】:

当我试图创建一个具有构造函数的类时,该构造函数按值获取该类的对象,例如:

class X{
    X(){}
    X(X x){} //Error!
};

然后 g++ 为第二个构造函数抱怨以下内容:

error: invalid constructor; you probably meant ‘X (const X&)’

亲爱的编译器,不,我不是说 const 引用。这一次,我想做我写的:按值传递参数x!为什么这无效?

【问题讨论】:

  • 你会如何调用这样的构造函数?

标签: c++ constructor compiler-errors


【解决方案1】:

您正在尝试创建一个复制构造函数,并且复制构造函数必须具有引用。否则,当您将 x 按值传递给构造函数时,编译器将不得不创建 x 的临时副本,为此它需要调用复制构造函数,并需要为其创建一个临时副本....无穷无尽。

因此,复制构造函数必须通过引用获取其参数以防止无限递归。

【讨论】:

    【解决方案2】:

    因为

    X(X x){} //Error!
    

    需要一个拷贝构造函数。即本身,即递归。即它什么时候结束?!

    【讨论】:

      【解决方案3】:

      您正在尝试实现一个复制构造函数,它只能通过传递对您要复制的对象的引用来工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        相关资源
        最近更新 更多