C++报错binding const string to reference of type x是什么含义?
报错触发原因分析
- 核心矛盾是const成员函数的const约束和返回值的非const属性冲突
- C++中被
const修饰的成员函数,会向编译器承诺「不会修改类实例的任何状态」,因此函数内部访问到的所有非静态成员变量,都会被隐式加上const修饰符。 - 你的
getSymbol()是const成员函数,函数内部的m_symbol会被视为const string类型,而你定义的返回值是string&(可修改的左值引用),相当于要把一个const类型的变量绑定到非const引用上,编译器会阻止这种破坏const安全性的行为,因此抛出你遇到的报错。
修复方案
根据你的业务需求,二选一即可:
- 如果你需要通过返回的引用修改私有成员
m_symbol,直接去掉getSymbol()的const修饰即可:
// 类内声明修改为 string& getSymbol(); // 函数定义修改为 string& CEntry::getSymbol(){ return m_symbol; }
- 如果你希望
getSymbol()可以在const类型的CEntry实例上调用,仅用于读取m_symbol的值,就将返回值改为const引用:
// 类内声明修改为 const string& getSymbol() const; // 函数定义修改为 const string& CEntry::getSymbol() const{ return m_symbol; }
额外注意点
你当前引入的头文件是<string.h>,这是C语言的字符串处理函数头文件,要使用std::string需要引入<string>头文件,替换后可避免部分编译器的兼容性问题。
内容的提问来源于stack exchange,提问作者Animor Romina
相关产品推荐
相关产品推荐

