C ++ std ::指向结构的指针列表

时间:2011-09-30 03:57:43

标签: c++ list pointers struct std

我认为这是一个非常简单的问题,但我很困惑。

我做错了什么?:

    std::list<curvesdata *> curvelist;
    curvesdata * curve = new curvesdata;

    curvelist.pop_back(curve);

   ---> no matching function for call to 'std::list<curvesdata*>::pop_back(curvesdata*&)

似乎我的指针被转换为指针引用......?为什么?

感谢。

4 个答案:

答案 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_backhttp://www.cplusplus.com/reference/stl/list/push_back/

答案 3 :(得分:0)

pop_back()不参与辩论。对你要做的事情没有匹配的电话。