繁体   English   中英

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

[英]C++ std::list of pointer to a struct

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

我做错了什么?:

    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 ( );

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

由于函数不带任何参数,因此编译器会通过给出不匹配函数的错误来尝试告诉您相同的信息。
要知道为什么编译器不报告确切的错误,请参阅以下内容:

为什么最编译器不-不检测纠正功能的签名式错误


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

list::push_back()

要将新元素添加到列表的开头,您应该使用:

list::push_front()

请参阅此处的参考。

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

仅供参考,错误消息告诉您确切的问题。 没有名为pop_back成员函数带有参数。

您可能正在考虑push_backhttp : push_back

pop_back()不带参数。 没有与您要执行的操作匹配的调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM