2010-03-02 9 views
2

반복 문제가 발생했습니다. 문제는 const 정확성과 관련이 있다고 생각합니다. 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

의 다른 구성원을 수정하지 않습니다 컴파일러를 알려줍니다. 덕분에 – Arun

답변

3

getGenerate이 비 const 인 경우, 이터레이터는 비 const이어야합니다. 그렇다면 getNumOptions도 비 const이어야합니다. getGenerate는 통제하지 않으면

, 당신이 할 수있는 아무것도 없다. 하지만 그 방법이 일 경우const 일 수 있습니다. 그들에게 const이어야한다고 말하십시오.

+0

! 이런. 나는 당신의 설명을 듣고 그 느낌이 들었다 ... 나는 (이유가없는) 나는 내가 쓴 방법이 const인지 아닌지에 대해 더 많은 것을 제어 할 수 있다고 생각했다. – jbu

1

B : getGenerate()는 다음과 같이 선언 할 필요가 :

class B 
{ 
    bool getGenerate() const; 
}; 

'const를'키워드는 중요한 비트 여기에있다. 이 getGenerate()를 호출하면 내가 현실에서 당신은 while 루프 내부의 경우 문 후 ITER의 발전 않는 가정 B.