Шаблоны и 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’

Любая идея будет оценена

1

Решение

В своем коде вы пытаетесь привязать временную ссылку к неконстантной ссылке. Это не разрешено

Правильная подпись вашего конструктора копирования:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]