2014-01-14 3 views
1

Я озадачен поведением следующего кода.std :: векторный итератор как член класса

У меня есть фиктивный класс с векторным членом. Мне также нужен член-итератор, чтобы я мог получить доступ к вектору в различных методах без необходимости объявлять новый каждый раз. Кажется, ОК до ввода метода const.

Метод test1 использует только вектор и члены итератора.

Метод test2 вызывает ошибку компиляции, когда я пытаюсь использовать элемент const_iterator с вектором. Однако, если я объявляю новый const_iterator в методе, который он компилирует.

Может кто-то объяснить это поведение.

Благодаря

class dummy { 
    public: 
     std::vector<double> data; 
     // Declare iterators as members 
     std::vector<double>::iterator iterator1; 
     std::vector<double>::const_iterator const_iterator1; 

     void test1(){ 
      iterator1 = data.begin(); 
     } 

     void test2() const { 
      // const_iterator1 = data.begin(); // Fails 
      std::vector<double>::const_iterator const_iterator2 = data.begin(); // Compiles 
     } 
}; 

ответ

4

Вы не можете изменять значения переменных-членов в const функции.

const_iterator1 = data.begin(); // Changes the value of const_iterator1 member variable 
+0

Gah! Так очевидно сейчас. Благодарю. – user3194233

Смежные вопросы