Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Std迭代器分配错误_C++_Iterator_Find_Std - Fatal编程技术网

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)