C ++ const итератор C2662 - PullRequest
       21

C ++ const итератор C2662

2 голосов
/ 02 марта 2010

Проблемы с итерацией. Я думаю, что проблема связана с правильностью const. Я предполагаю, что B :: getGenerate () должен быть const, чтобы этот код работал, но у меня нет контроля над B :: getGenerate ().

Любая помощь очень ценится.

Спасибо заранее, JBU

Код следует:

int
A::getNumOptions() const
{
   int running_total = 0;

   BList::const_iterator iter = m_options.begin();

   while(iter != m_options.end())
   {
      if(iter->getGenerate()) //this is the line of the error; getGenerate() returns bool; no const in signature
      {
         running_total++;
      }
   }

   return running_total;
}

1>. \ A.cpp (118): ошибка C2662: «B :: getGenerate ()»: невозможно преобразовать указатель «this» из «const B» в «B &»

Ответы [ 2 ]

3 голосов
/ 02 марта 2010

Что ж, если getGenerate неконстантно, ваш итератор должен быть неконстантным. И если это так, ваш getNumOptions также должен быть неконстантным.

Если getGenerate не находится под вашим контролем, вы больше ничего не можете сделать. Но если этот метод может быть const, доведите его до сведения того, кто реализовывал этот метод; скажи им, что это должно быть const.

1 голос
/ 02 марта 2010

B :: getGenerate () должен быть объявлен так:

class B
{
   bool getGenerate() const;
};

Ключевое слово const является здесь важным битом. Это говорит компилятору, что вызов getGenerate () не изменит ни одного из других членов B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...