2015-12-26 88 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; 
} 

謝謝你的建設性的批評。在提出更多問題時,我會牢記它。

相關問題