C++ Std迭代器分配错误
如果这个问题很愚蠢,请容忍我 在头文件中定义了以下内容:C++ Std迭代器分配错误,c++,iterator,find,std,C++,Iterator,Find,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; 这段代码(老实说,我是复制粘贴的)是编译的,但是如果我想检查find_if()返回的值,如下所示: NAMES_DAT
typedef char NAME_T[40];
struct NAME_MAPPING_T
{
NAME_T englishName;
NAME_T frenchName;
};
typedef std::vector<NAME_MAPPING_T> NAMES_DATABASE_T;
这段代码(老实说,我是复制粘贴的)是编译的,但是如果我想检查find_if()返回的值,如下所示:
NAMES_DATABASE_T::iterator it;
it = std::find_if(blah ..)
代码将无法编译强>
实际上
it=std::如果(…)查找\u
将返回错误:
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)
错误C2679:二进制“=”:未找到接受类型为“std::\u Vector\u const\u iterator”的右操作数的运算符(或没有可接受的转换)
怎么了
谢谢您的时间。
const NAMES\u DATABASE\u T*wordsDb代码>
您的wordsDb
是常量,因此wordsDb->begin()
返回常量迭代器,因此find\u if
也返回常量迭代器。您试图将该常量迭代器分配给非常量NAMES\u DATABASE\u T::iterator it
,因此出现错误
您可以使用NAMES\u DATABASE\u T::const\u iterator
获取常量迭代器。你应该使用std::string
而不是那些字符缓冲区,除非有一些罕见的情况需要使用其他缓冲区代码>
您的wordsDb
是常量,因此wordsDb->begin()
返回常量迭代器,因此find\u if
也返回常量迭代器。您试图将该常量迭代器分配给非常量NAMES\u DATABASE\u T::iterator it
,因此出现错误
您可以使用NAMES\u DATABASE\u T::const\u iterator
获取常量迭代器。您应该使用std::string
而不是那些字符缓冲区,除非有一些罕见的情况需要使用其他缓冲区。使用字符数组代替std::string对名称有什么原因吗?使用字符数组代替std::string对名称有什么原因吗?
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)