c++ - const 和非常量方法之间的区别?

标签 c++ vector type-conversion constants

int CRegister::CountCars(const string& name, const string& surname)const{
const pair<string,string> wholename(name,surname);
vector<CDriver>::iterator Diterator=lower_bound(m_Drivers.begin(),m_Drivers.end(),wholename);
if (Diterator<m_Drivers.end()){
    if(Diterator->m_name.compare(wholename.first)!=0 || Diterator->m_surname.compare(wholename.second)!=0) return 0;
    return Diterator->m_DriversNumber;
}
return 0;
}

你好,当我尝试编译它时,它在第三行抛出错误:

"conversion from ‘__gnu_cxx::__normal_iterator<const CDriver*, std::vector<CDriver> >’ to non-scalar type ‘std::vector<CDriver>::iterator {aka __gnu_cxx::__normal_iterator<CDriver*, std::vector<CDriver> >}’ requested

当我将函数 CountCars 设置为非常量时,它编译没有问题。我应该改变什么来解决这个问题? (函数必须是常量)

最佳答案

要解决您的问题,您必须使用 const_iterator

原因如下:该方法被标记为 const,这意味着该方法本身不会更改调用该方法的对象实例的状态。

因此,在 const 方法中,您不能在未标记为 const 的同一对象上调用任何其他方法。当然,因为新调用不能保证它是 const,所以第一个方法不能再声称是 const。

通过声明迭代器 const,您将使用 lower_bound 的 const 版本。

关于c++ - const 和非常量方法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29250328/

相关文章:

java - Java 中 F 界多态性的返回类型

c++ - 如何使用If和else语句在 vector 中搜索

c++ - 如何用特定符号查找和替换字符串中的所有字符 C++

c++ - 如何使用 freetype 库使字形变粗?

c++:Python 的列表模拟

c++ - 在 C++ 中按字母顺序排列列表中的所有单词

c++ - std::vector::erase() 抛出的异常

java - 在Java中将日期转换为长

c++ - 使用 makefile 仅动态编译选定的文件

python - 使用 Pandas 将分类值转换为二进制