C ++ std :: список указателей на структуру - PullRequest
0 голосов
/ 30 сентября 2011

Мне кажется, это очень простой вопрос, но я в замешательстве.

Что я делаю не так?:

    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 ]

4 голосов
/ 30 сентября 2011
void pop_back ( );

Не принимает никаких аргументов.Он удаляет последний элемент в контейнере списка, эффективно уменьшая размер списка на единицу.См. Ссылку здесь .

Поскольку функция не принимает аргументов, компилятор пытается сообщить вам то же самое, выдав ошибку несоответствующей функции.
Чтобы узнать, почему компилятор не сообщает точную ошибку, посмотрите это:

почему-компилятор-не-обнаруживает-исправляет-функцию-подпись-в-ошибке


Чтобы добавить новый элемент в конец списка, вы должны использовать:

list::push_back()

Чтобы добавить новый элемент в началесписок, который вы должны использовать:

list::push_front()

См. ссылку здесь .

0 голосов
/ 30 сентября 2011

pop_back() не принимает аргумент.Нет совпадения с тем, что вы пытаетесь сделать.

0 голосов
/ 30 сентября 2011

Просто к вашему сведению, сообщение об ошибке говорит вам, что именно не так. Для списка, принимающего аргумент, нет функции-члена с именем pop_back.

Возможно, вы думаете о push_back: http://www.cplusplus.com/reference/stl/list/push_back/

0 голосов
/ 30 сентября 2011

std::list::pop_back() не принимает аргумент, он удаляет последний элемент из списка. Похоже, вы хотите добавить, поэтому используйте push_back().

curvelist.push_back(curve);

edit: Теперь позвольте мне рассказать о 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);
        ~~~~~~~~~~ ^
...