2012-08-10 76 views
3

当我试图创建具有一个构造,其通过值取该类的一个对象,例如像一类:C++“无效构造函数”

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

则g ++抱怨用于第二构造函数以下:

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

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

+0

你会如何调用这样的构造函数? – 2012-08-10 15:42:31

回答

13

您正在尝试创建复制构造函数,并且复制构造函数必须参考。否则,当你通过值传递x到构造函数中时,编译器将不得不创建x的临时副本,为此需要调用复制构造函数,为此需要创建一个临时副本....广告infinium。

所以拷贝构造函数必须通过引用来引用它的参数来防止无限递归。

5

因为

X(X x){} //Error! 

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

0

您正试图实现一个复制构造函数,该构造函数仅通过将引用传递给要复制的对象。