итераторы для вектора указателей

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

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 >> &)

Я также получаю сообщение об ошибке для оператора ! = ... И еще один набор тех же ошибок для другого вектора.

6
задан ildjarn 15 April 2011 в 05:54
поделиться