2015-12-26 160 views
1

g ++表示在调用订单的复制构造函数的主程序中存在一行时,调用(Order)(Order &)中没有匹配项。为什么这个拷贝构造函数不工作?

Order.h-它包含类顺序

class Order 
{ 

private: 

int orderNo; 



public: 

Order() 
{} 

//Copy Constructor 
Order(Order &o) 
{ 
    orderNo = o.putOrderNo(); 
} 

Order(int i) 
{ 
    orderNo = i; 
} 

}; 

的示数的代码是在主文件 -

bool setCurrentOrder(Order o) 
{ 
    CurrentOrder(o);  //currentOrder is a global var defined elsewhere. 
          //after this, there are some comparisons to determine 
          //whether the object was copied, then true or false is returned. 
}  

编译器拒绝接受线 “CurrentOrder(O)”,其将o的详细信息复制到名为CurrentOrder的另一个Order类对象中。 我是否必须重载=运算符还是有其他方法可以解决这个问题?

编辑

此代码已经过时了,因为我已经解决了这个问题,我也重新设计这一点,其他的代码,所以我现在有一些新的,我应约快问!

+1

请研究发布指南,你应该提取一个最小的例子,格式一致等。 –

+0

嗯,好的。下次我会记住这一点。然而,在这里,我觉得源文件足够小,这就是我为什么这么做的原因。 – Raghav

+1

这不是关于绝对大小,而是关注问题的本质。许多问题在这里甚至被问到之前都会这样回答。 –

回答

9

副本构造函数构造一个新的对象。由于CurrentOrder已经存在,因此再次构造它是没有意义的:CurrentOrder(o)没有意义。至转让o的值为CurrentOrder使用作业:CurrentOrder = o;

+1

'CurrentOrder(o)'不是没有意义的 - 这是'operator()'方法的调用,它在给定的代码片段中是未定义的。 – Rames

+0

谢谢,我会尽力的。 – Raghav

+1

@Raghav是否实现了'operator ='? – erip

0

好吧,我的问题是通过重载=运算符来解决的。

基本上,我想用复制构造函数来定义对象如何被复制,但是,在这种情况下,运算符重载可能是最好的选择,因为我的意图是将旧对象中的值赋给新对象。皮特在其他回答中解释了这一点。

这里是怎么回事私下作出─

void operator=(Order &o) 
{ 
orderNo = o.orderNo; 
} 

谢谢你的建设性的批评。在提出更多问题时,我会牢记它。

相关问题