我认为这是一个非常简单的问题,但我很困惑。
我做错了什么?:
std::list<curvesdata *> curvelist;
curvesdata * curve = new curvesdata;
curvelist.pop_back(curve);
---> no matching function for call to 'std::list<curvesdata*>::pop_back(curvesdata*&)
似乎我的指针被转换为指针引用......?为什么?
感谢。
答案 0 :(得分:4)
void pop_back ( );
不接受任何争论。它删除列表容器中的最后一个元素,有效地将列表大小减少一个。请参阅参考 here 。
由于该函数不带任何参数,编译器会尝试通过给出非匹配函数的错误来告诉您相同的信息。
要知道为什么编译器不报告确切的错误,请参阅:
<强> why-the-compiler-does-not-detect-correct-function-signature-in-error 强>
要在列表末尾添加新元素,您应该使用:
list::push_back()
要在列表的前面添加新元素,您应该使用:
list::push_front()
参见参考文献 here 。
答案 1 :(得分:0)
std::list::pop_back()
不接受参数,它会删除列表中的最后一个元素。您似乎想要添加,因此请使用push_back()
。
curvelist.push_back(curve);
编辑:现在让我了解一下clang ++及其更好的错误消息:
#include <list>
int main() {
std::list<int> x;
x.pop_back(1);
}
$ clang++ example.cxx
example.cxx:6:13: error: too many arguments to function call, expected 0, have 1
x.pop_back(1);
~~~~~~~~~~ ^
答案 2 :(得分:0)
仅供参考,错误消息告诉您究竟出了什么问题。对于带有参数的列表,没有名为pop_back
的成员函数。
您可能会想到push_back
:http://www.cplusplus.com/reference/stl/list/push_back/
答案 3 :(得分:0)
pop_back()
不参与辩论。对你要做的事情没有匹配的电话。