[英]Templates and 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
...
使用舊版本的g ++編譯就可以了,但是現在使用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’
任何想法將不勝感激
在您的代碼中,您嘗試將臨時綁定到非const引用。 這是不允許的。
復制構造函數的正確簽名為:
class TMergeNode {
public:
inline TMergeNode(const TMergeNode &b); // copy constructor
// ^^^^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.