在C ++中,我构建了一个基本类,如:
class MyList {
protected:
list<MyOtherClass<int>> nodes;
int size;
...
}
但是稍后我在MyList中尝试将值插入节点列表时,例如:
MyOtherClass<int>* temp = new MyOtherClass<int>(size);
nodes.push_back(temp);
我收到编译错误
cannot convert argument 1 from 'MyOtherClass<int> *' to 'MyOtherClass<int> &&'
我绞尽脑汁,尝试了一切我想到的东西来解决它。想法?
答案 0 :(得分:1)
那是因为类型不兼容。您的列表属于list<MyOtherClass<int>>
,temp
的类型为MyOtherClass<int>*
。试试这个:
MyOtherClass<int> temp(size);
nodes.push_back(temp);
或者这个:
class MyList {
protected:
list<MyOtherClass<int> *> nodes;
int size;
...
}
答案 1 :(得分:0)
但是稍后我在MyList中尝试将值插入节点列表时,例如:
MyOtherClass<int>* temp = new MyOtherClass<int>(size); nodes.push_back(temp);
我收到编译错误
那是因为您没有插入MyOtherClass<int>
值。您正在插入指向不必要的动态分配MyOtherClass<int>
值的指针。不要那样做。
只需以正常方式创建新对象:
MyOtherClass<int> temp(size);
nodes.push_back(temp);
甚至:
nodes.emplace_back(size);
通常(除非你正在写一些库代码或分配器)当你写了new
时,你犯了一个错误,或者暂时忘记了你写的是什么语言。:)是的,我知道那里网上有一百万个“教程”,告诉你new
的事情。他们错了。