2011-09-30 74 views
0

我相信这是一个非常简单的问题,但我很困惑。C++ 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
void pop_back (); 

不带任何参数。它删除列表容器中的最后一个元素,有效地将列表大小减少一个。见参考文献here

由于该函数不接受任何参数,因此编译器试图通过给出不匹配函数的错误来告诉您相同的结果。
知道为什么编译器不报告确切的错误,看到以下内容:

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


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

list::push_back() 

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

list::push_front() 

请参阅参考文献here

+0

的确,我是愚蠢的......我使用了错误的功能....感谢您的回答! – Damien

0

std::list::pop_back()不接受参数,它删除列表中的最后一个元素。看起来你想添加,所以使用push_back()

curvelist.push_back(curve);

编辑:现在让我蜡关于铛++和更好的错误消息:

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

确实,我是愚蠢的......我使用了错误的功能....感谢您的回答! – Damien

0

仅供参考,错误消息告诉你到底出了什么问题。对于需要参数的列表,没有称为pop_back的成员函数。

你也许会想的push_backhttp://www.cplusplus.com/reference/stl/list/push_back/

+0

@birryree:编辑我的问题。我没有完全完成这个想法而放弃了我的判决。这个错误非常明显,它指出没有这样的函数需要参数。 –

+0

它可以变得更清晰,就像叮当的前端一样。对于初学者来说,一种语言会更难以理解,因为它并不明显。无论如何,我会删除我的第一条评论。 :) – birryree

+0

@birryree:完全同意前面几乎所有的C++编译器都有可怕的错误信息。就我个人而言,我非常喜欢Ada提供的有用错误消息。 –

0

pop_back()不带参数。没有与你想要做的事情相匹配的电话。