错误:没有用于调用&gt;的匹配函数'std :: vector <memberlistentry> :: push_back和</memberlistentry>

时间:2015-03-18 19:00:55

标签: c++ c++11 vector

您好我正在尝试将类型为MemberListEntry的对象插入到包含该类型的vector memberList中。为此,我试图使用vector的push_back函数,但它给了我一个错误。

MemberListEntry *object = new MemberListEntry(id, port, memberNode->heartbeat, par->getcurrtime());
memberNode->memberList.push_back(object);
  

MP1Node.cpp:118:41:错误:没有匹配的调用函数   “的std ::矢量::的push_back(MemberListEntry *安培)”
  memberNode-&GT; memberList.push_back(对象);

这是我的载体

vector<MemberListEntry> memberList;

在班级

  

班级成员{.........

更改为

memberNode->memberList.push_back<MemberListEntry>(object);

给出

  

错误:在'&gt;'标记之前预期的primary-expression
  memberNode-&GT; memberList.push_back(对象);

3 个答案:

答案 0 :(得分:1)

您正在尝试将指针放入不包含指针的向量中。你有两种可能性:

1-将您的vector<MemberListEntry>更改为vector<MemberListEntry*>

2-将您的第一行更改为:

MemberListEntry object(id, port, memberNode->heartbeat, par->getcurrtime());

如果您使用第一个,请务必在向量的元素上调用delete。

答案 1 :(得分:1)

memberList包含MemberListEntry s而非MemberListEntry * s。为什么要动态分配MemberListEntry?替换

MemberListEntry *object = new MemberListEntry(id, port, memberNode->heartbeat, par->getcurrtime());
memberNode->memberList.push_back(object);

memberNode->memberList.push_back(MemberListEntry(id, port, memberNode->heartbeat, par->getcurrtime()));

或更好

memberNode->memberList.emplace_back(id, port, memberNode->heartbeat, par->getcurrtime());

答案 2 :(得分:0)

您只需从第一行删除*new即可解决此问题。

与其他(也是正确的)建议相比,在某些情况下这可能效率较低,但这是一个更简单的改变,绝对最大性能很少会对这类事情产生影响。

我想指出我的早期帖子here,了解在C ++中使用new的一些背景知识。总结那篇文章,在C ++中你没有调用new来创建一个对象,你只需要调用构造函数。 new的使用仅更改为对象分配内存的方式。如果没有new,内存将自动分配和管理,但new会动态管理(使用heap)并且必须由程序员更仔细地处理。