2011-09-30 80 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()不帶參數。沒有與你想要做的事情相匹配的電話。