c++ std::指向结构体的指针列表

C++ std::list of pointer to a struct

本文关键字:指针 结构体 列表 std c++      更新时间:2023-10-16

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

我做错了什么?:

    std::list<curvesdata *> curvelist;
    curvesdata * curve = new curvesdata;
    curvelist.pop_back(curve);
   ---> no matching function for call to 'std::list<curvesdata*>::pop_back(curvesdata*&)

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

谢谢。

void pop_back ( );

不接受任何参数。它删除列表容器中的最后一个元素,有效地将列表大小减少了一个。参考

由于该函数不接受任何参数,编译器试图通过给出不匹配函数的错误来告诉您相同的信息。
要知道为什么编译器不报告准确的错误,请参见:

why-the-compiler-does-not-detect-correct-function-signature-in-error


要在列表的末尾添加一个新元素,您应该使用:

list::push_back()

要在列表的前面添加一个新元素,您应该使用:

list::push_front()

请参阅此处的参考

仅供参考,错误消息是告诉你到底是什么错了。没有名为pop_back的成员函数可以接受实参。

您可能会想到push_back: http://www.cplusplus.com/reference/stl/list/push_back/

pop_back()不接受参数。这里没有匹配的调用

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);
        ~~~~~~~~~~ ^