2012-02-26 2 views
1

벡터, 반복기를 사용한 다음 const을 사용하는 데 문제가 있습니다.벡터 및 반복기를 사용할 때 const 동작으로 고생합니다.

문맥의 약간을 위해 나는 벡터 내의 모든 끈을 쉽게 인쇄 할 수있는 vector<string>를위한 쓰기 방법을 창조하는 것을 시도하고있다. 나는이 시도 I 라인 2에 오류를 그만 둘 때

void ArrayStorage::write(ostream &sout) const{ 
    for (vector<string>::iterator stringIt = _dataVector.begin(); 
        stringIt < _dataVector.end(); 
        stringIt++){ 
     sout << *stringIt; 
    } 
} 

ostream& operator<<(ostream &sout, const ArrayStorage &rhs){ 
    rhs.write(sout); 
    return sout; 
} 

:

가 ' std::_Vector_iterator<_Myvec>'에 ' std::_Vector_const_iterator<_Myvec>'에서 변환 할 수 없습니다

여기에 코드의 비트입니다.

그래서 나는 쓰기 방법의 끝에서 const를 제거해야하고 operator<< 위해 나는 우 매개 변수에서 const를 제거해야 작동 할 수 있습니다.

왜 이런가요? 나는 어떤 반원도 바꾸려고하지 않으므로, 무슨 일이 일어나고 있는지 이해하지 못한다. 무엇이 실종 된거야?

+1

토턴가의 대답은 정확해야합니다. 또한 루프는 일반적으로 다음과 같이 보입니다. for (vector :: iterator stringIt = _dataVector.begin(); stringIt **! = ** _dataVector.end(); stringIt ++) {...} 일반적으로 임의 액세스 이터레이터는 ** <** or **> **을 지원합니다. – alfa

+0

게시물에 HTML을 해킹하는 대신, 구성 패널 옆에있는 '?'버튼을 클릭하여 게시물의 서식을 지정하는 방법을 알아보십시오. –

답변

6

컴파일러에서 알려주는 것과 같습니다.

::const_iterator 

대신

::iterator 

그렇게

for (vector<string>::const_iterator stringIt = _dataVector.begin(); 
       stringIt != _dataVector.end(); 
       ++stringIt){ 
    sout << *stringIt; 
} 

작동 할 수 있습니다. end()와 비교할 때 < 대신! =를 사용해야합니다.

+0

나는 이렇게 어리 석다 느낀다 ... 나가 이것을 배치 한 직후에 나는 나가 어디에 틀리게 가고 있는지 계산했다! 감사합니다. – IdiotCoderCodie

관련 문제