簡體   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