2010-03-02 2 views
2

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

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

Спасибо заранее, 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()': не удается преобразовать ' этот 'указатель от' const B 'до' B & '

+0

Я предполагаю, что на самом деле вы продвигаете его после if-утверждения внутри цикла while. – Arun

ответ

3

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

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

+0

спасибо! Дух. Я получаю ваше объяснение и чувствую, что это так ... Я просто (без причины) думал, что у меня больше контроля над тем, были ли методы, которые я написал, были или нет. – jbu

1

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

class B 
{ 
    bool getGenerate() const; 
}; 

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