2012-07-06 91 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