2013-11-12 2 views
-1

У меня есть несколько классов и несколько векторов, содержащих несколько объектов каждого типа. Для простоты я просто расскажу об одном. Поэтому у меня есть:Удаление объектов из вектора по заданному индексу

class Multiple : public Question { 
    public: 
     //Member functions here 
    private: 
     int num_choices; 
     string correct; 
     vector<string> choices; 
}; 

Он также наследует несколько элементов данных, int points;, int chapter; и string prompt;.

У меня есть vector<Multiple> mcq; для хранения нескольких объектов класса (не динамически выделенных). Но теперь мне нужно иметь возможность удалять объект по заданному индексу, я пробовал только mcq.erase(index), но с помощью Visual Studio 2012 он дает ошибку Error: no instance of overloaded function "std::vector<_Ty, _Alloc>::erase [with _Ty=Multiple, _Alloc = std::allocator<Multiple>]" matches the argument list argument types are: (int) object type is: std::vector<Multiple, std::allocator<Multiple>>, и я понятия не имею, что это значит или как его исправить.

Заранее благодарю за любую помощь.

+3

try mcq.erase (mcq.begin() + index); –

+0

erase хочет итератор http://www.cplusplus.com/reference/vector/vector/erase/ –

+0

Если у вас есть сомнения, посмотрите [хорошую ссылку] (http://en.cppreference.com/w/cpp/ контейнер/вектор/стирание). – juanchopanza

ответ

4

Метод erase не принимает индекс, а позицию итератора. Вы должны сделать:

mcq.erase(mcq.begin() + index) 
Смежные вопросы