首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“无法将参数从Class<T>*转换为Class<T> &&”列表插入

“无法将参数从Class<T>*转换为Class<T> &&”列表插入
EN

Stack Overflow用户
提问于 2018-03-18 21:19:58
回答 2查看 203关注 0票数 0

在C++中,我构造了一个基本类,如下所示:

代码语言:javascript
复制
class MyList {
protected:
    list<MyOtherClass<int>> nodes;
    int size;
...
}

但是,稍后在MyList中,当我尝试向节点列表中插入一个值时,例如:

代码语言:javascript
复制
MyOtherClass<int>* temp = new MyOtherClass<int>(size);
nodes.push_back(temp);

我收到一个编译错误说

代码语言:javascript
复制
cannot convert argument 1 from 'MyOtherClass<int> *' to 'MyOtherClass<int> &&'

我绞尽脑汁想办法解决它。有什么想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-18 21:22:18

那是因为这种类型不兼容。您的列表是list<MyOtherClass<int>>类型,tempMyOtherClass<int>*类型。试试这个:

代码语言:javascript
复制
MyOtherClass<int> temp(size);
nodes.push_back(temp);

或者这个:

代码语言:javascript
复制
class MyList {
protected:
    list<MyOtherClass<int> *> nodes;
    int size;
...
}
票数 1
EN

Stack Overflow用户

发布于 2018-03-18 21:29:13

但是,稍后在MyList中,当我尝试向节点列表中插入一个值时,例如: MyOtherClass* temp =新的MyOtherClass(大小);nodes.push_back(temp); 我收到一个编译错误

这是因为您没有插入MyOtherClass<int>值。您正在插入指向不必要的动态分配的MyOtherClass<int>值的指针。别干那事。

只需以正常的方式创建新对象:

代码语言:javascript
复制
MyOtherClass<int> temp(size);
nodes.push_back(temp);

甚至:

代码语言:javascript
复制
nodes.emplace_back(size);

通常(除非您正在编写一些库代码或分配器)在编写new时,您已经犯了一个错误,或者暂时忘记了您用的是哪种语言。)是的,我知道网上有一百万个“教程”告诉你如何使用new的东西。他们错了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49352910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档