2012-07-06 10 views
1

만약 질문이 어리석은 경우 저에게 꼭 기부하십시오. 표준 반복 반복자 할당 오류

다음

는 헤더 파일에 정의되어 있습니다

typedef char NAME_T[40]; 

struct NAME_MAPPING_T 
{ 
    NAME_T englishName; 
    NAME_T frenchName; 
}; 

typedef std::vector<NAME_MAPPING_T> NAMES_DATABASE_T; 

나중에 필요가 특정 영어 이름을 찾을 수 있음을 제공 :

const NAMES_DATABASE_T *wordsDb; 

string str; 

std::find_if( wordsDb->begin(), 
       wordsDb->end(), 
       [str](const NAME_MAPPING_T &m) -> bool { return strncmp(m.englishName, str.c_str(), sizeof(m.englishName)) == 0; }); 

내가-붙여 복사이 코드는 (정직하게) 컴파일하지만 find_if()에서 반환 한 값을 확인하려면 다음과 같이하십시오.

NAMES_DATABASE_T::iterator it; 
it = std::find_if(blah ..) 

코드가 컴파일되지 않습니다!

사실상는 표준 : : find_if (...) 오류 반환합니다 = 라인 :

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::_Vector_const_iterator<_Myvec>' (or there is no acceptable conversion) 

잘못 무엇입니까?

감사합니다. 귀하의 wordsDb

+1

std :: string 대신 이름에 char 배열을 사용해야하는 이유가 있습니까? –

답변

5

const NAMES_DATABASE_T *wordsDb;

그러므로 wordsDb->begin()가하는 CONST 반복자를 반환하므로 find_if가 아니라 const를 반복자를 반환 CONST입니다. 해당 const 반복기를 const가 아닌 NAMES_DATABASE_T::iterator it에 할당하려고합니다. 따라서 오류가 발생합니다.

NAMES_DATABASE_T::const_iterator을 사용하면 const 반복자를 얻을 수 있습니다. 그리고 특별한 경우가 아닌 한, char 버퍼 대신 std::string을 사용해야합니다.

+0

그 일을했습니다. 감사. – Wartin