Я прочитал другой пост, в котором был дан ответ на вопрос об итераторах для векторов указателей. Я пытался использовать ту же концепцию в своем коде, но получаю некоторые ошибки компиляции. Пример кода, на котором я основывал свой код:
vector<c*> cvect;
cvect.push_back(new sc);
vector<c*>::iterator citer;
for(citer=cvect.begin(); citer != cvect.end(); citer++) {
(*citer)->func();
}
Я хочу использовать аналогичную концепцию для создания конструктора глубокой копии для класса, который имеет два члена данных, которые являются векторами указателей на объекты. Мой код похож на этот:
class MyContainer {
vector<MyStuff*> vecOne;
vector<MyStuff*> vecTwo;
public:
MyContainer(const MyContainer& other);
};
MyContainer::MyContainer(const MyContainer& other) {
// copy vector one
vector<MyStuff*>::iterator vec1_itr;
for (vec1_itr = other.vecOne.begin(); vec1_itr != other.vecOne.end(); vec1_itr++) {
vecOne.push_back(new MyStuff(vec1_itr));
}
// copy vector two
vector<MyStuff*>::iterator vec2_itr;
for (vec2_itr = other.vecTwo.begin(); vec2_itr != other.vecTwo.end(); vec2_itr++) {
vecTwo.push_back(new MyStuff(vec2_itr));
}
}
Я получаю некоторые ошибки компиляции, например:
/path/MyContainer.cpp:38: error: нет совпадений для '
operator =
' в 'vec1_Itr = other-> MyContainer :: vecOne. std :: vector <_Tp, _Alloc> :: begin [with _Tp = MyStuff *, _Alloc = std :: allocator
'] () кандидатами являются:
__ gnu_cxx :: __ normal_iterator < MyStuff *, std :: vector
>> & __gnu_cxx :: __ normal_iterator >> :: operator = (const __gnu_cxx :: __ normal_iterator >> &)
Я также получаю сообщение об ошибке для оператора ! =
... И еще один набор тех же ошибок для другого вектора.