2012-12-06 52 views
1

我有這樣的代碼模板和g ++ 4.7

namespace MSL{ 

template <typename T> class TListNode; 
template <typename T> class TList; 
... 

template <typename T> 
int TList<T>::add(T v) { 
TListNode<T> *pn; 
pn = new TListNode<T>; 
... 

class TMergeNode { 
public: 

inline  TMergeNode(int cluster1=-1, int cluster2=-1, TCMData mergeVal=0); 
inline  TMergeNode(TMergeNode &b);    // copy constructor 
... 

它編譯使用舊版本克OK ++,但現在隨着4.7版本,我得到出現以下錯誤:

./msl/MSL_List_Template.h: In instantiation of ‘int MSL::TList<T>::add(T) [with T = TMergeNode]’: 
clustermerges.cpp:282:33: required from here 
./msl/MSL_List_Template.h:616:23: error: no matching function for call to ‘TMergeNode::TMergeNode(TMergeNode)’ 
./msl/MSL_List_Template.h:616:23: note: candidates are: 
In file included from main.cpp:78:0: 
clustermerges.cpp:70:8: note: TMergeNode::TMergeNode(TMergeNode&) 
clustermerges.cpp:70:8: note: no known conversion for argument 1 from ‘TMergeNode’ to ‘TMergeNode&’ 
clustermerges.cpp:68:8: note: TMergeNode::TMergeNode(int, int, MSL::TCMData) 
clustermerges.cpp:68:8: note: no known conversion for argument 1 from ‘TMergeNode’ to ‘int’ 

任何想法,將不勝感激

+0

嗯,它看起來像你失蹤了'TMergeNode'拷貝構造函數。 – melpomene

+0

更新:我沒有粘貼構造函數的代碼,對不起。 – user1883163

+0

這不是一個複製構造函數。 – melpomene

回答

1

在你的代碼中,你試圖綁定一個臨時的非const引用。這是不允許的。

你的拷貝構造函數的正確的簽名是:

class TMergeNode { 
public: 
inline  TMergeNode(const TMergeNode &b);    // copy constructor 
//      ^^^^^