2012-07-06 75 views
1

如果問題很愚蠢,請耐心等待。Std迭代器賦值錯誤

下面是一個頭文件中定義:

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 ..) 

代碼不會編譯!

實際上 吧=的std :: 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) 

有什麼不對?

謝謝你的時間。

+1

是否有使用char數組而不是std :: string的原因? – 2012-07-06 06:52:09

回答

5

const NAMES_DATABASE_T *wordsDb;

wordsDb是常量,因此wordsDb->begin()返回一個常量迭代器,因此find_if返回一個const迭代器爲好。你試圖把這個常量迭代器賦值給非const的常量NAMES_DATABASE_T::iterator it,因此是錯誤。

您可以使用NAMES_DATABASE_T::const_iterator來獲取const迭代器。你應該使用std::string而不是那些字符緩衝區,除非有一些罕見的情況需要其他的。

+0

這樣做的工作。謝謝。 – Wartin 2012-07-06 07:01:20