c++ - 找不到 operator= 的匹配项(在 vector<string> 中查找值)

标签 c++ vector find

我显然在这里遗漏了什么,但是什么?

定义(...表示有效代码,不是实际的三点):

class CrmxFile {
private:
    const std::vector<std::string> validValues;
    int value;

public:
    void setValue(std::string _value);

...
}

std::vector<std::string> CrmxFile = {...};

在我的代码中:

void Crmx::SetValue(std::string _value) {
    std::vector<std::string>::iterator idx;
    if((idx = std::find(validValues.begin(), validValues.end(), _value)) == validValues.end()) {
        value = 0;
    }
    else {
        value = idx - validValues.begin();
    }
}

我用 gcc -c -std=c++0x 编译它,我得到这个错误:

CrmxFile.cpp: In member function ‘void CrmxFile::SetValue(std::string)’:
CrmxFile.cpp:24:64: error: no match for ‘operator=’ in ‘idx = std::find [with _IIter = __gnu_cxx::__normal_iterator<const std::basic_string<char>*, std::vector<std::basic_string<char> > >, _Tp = std::basic_string<char>](Id3V1::validValues.std::vector<_Tp, _Alloc>::begin [with _Tp = std::basic_string<char>, _Alloc = std::allocator<std::basic_string<char> >, std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const std::basic_string<char>*, std::vector<std::basic_string<char> > >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::const_pointer = const std::basic_string<char>*](), Id3V1::validValues.std::vector<_Tp, _Alloc>::end [with _Tp = std::basic_string<char>, _Alloc = std::allocator<std::basic_string<char> >, std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const std::basic_string<char>*, std::vector<std::basic_string<char> > >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::const_pointer = const std::basic_string<char>*](), (*(const std::basic_string<char>*)(& _value)))’
CrmxFile.cpp:24:64: note: candidates are:
/usr/include/c++/4.6/bits/stl_iterator.h:702:11: note: __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >& __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >::operator=(const __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >&)
/usr/include/c++/4.6/bits/stl_iterator.h:702:11: note:   no known conversion for argument 1 from ‘__gnu_cxx::__normal_iterator<const std::basic_string<char>*, std::vector<std::basic_string<char> > >’ to ‘const __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >&’
/usr/include/c++/4.6/bits/stl_iterator.h:702:11: note: __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >& __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >::operator=(__gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >&&)
/usr/include/c++/4.6/bits/stl_iterator.h:702:11: note:   no known conversion for argument 1 from ‘__gnu_cxx::__normal_iterator<const std::basic_string<char>*, std::vector<std::basic_string<char> > >’ to ‘__gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >&&’

我错过了什么?或者,是否有更好的方法来查找 vector 中给定值的索引?

最佳答案

idx必须是 const_iteratorvalidValuesconst vector<...> .

std::vector<std::string>::const_iterator idx;

关于c++ - 找不到 operator= 的匹配项(在 vector<string> 中查找值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221145/

相关文章:

linux - 如何为目录中的每个文件创建软链接(soft link)?

c++ - 如何在 C++ 中使用 jsoncpp 编写嵌套的 json

c++ - 实现跳跃迭代器的增量

c++ - 有没有更简单的方法来过滤非字母字符? C++

java - 将实体移动到带有像素的位置 - libgdx - vector 数学

c++ - 带有嵌套 for 循环的 vector 粒子 - 未检测到碰撞

arrays - 测试数组是否在 lisp 中的列表中

c++ - 我可以在单独的线程上刷新我的 ofstream 吗?

c++ - 改变成员 vector 的类型

linux - git 在多个文件名和文件夹名中查找并重命名一个字符串