错误:非const引用的初始值必须为左值
Error: Initial value of reference to non-const must be an lvalue
字符串类又出错了。智能感知不允许我使用strcmp来比较对象与自调用对象(即*this)。
我试着制作自己的操作符转换函数来帮助解决这个问题,但它仍然给我错误。
我需要在我的代码中做些什么来让这个工作??
//Overloaded comparison operators
bool &String::operator<(const String & obj)
{
return strcmp(*this, obj) < 0 ? true : false;
}
//Operator conversion function
String::operator char const * () const
{
return mStr;
}
您正在返回对局部变量的引用。按值返回。您还可以简化返回表达式,并使方法为const
,因为比较两个对象不应该改变它们中的任何一个:
bool String::operator<(const String & obj) const {
return strcmp(*this, obj) < 0;
}
虽然我不确定strcmp
可以处理两个String
s,这是你传递的。从你之前的问题来看,你需要
return strcmp(mstr, obj.mStr) < 0;
设置为const
,删除&
bool String::operator<(const String & obj) const
^^^^^
返回对临时对象的引用会导致未定义的行为。
错误信息明确指向strcmp()
的第一个参数,*这是一个右值,但strcmp需要一个左值,尝试在前面添加一句话:
String thisObj = *this;
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 对临时对象的Const引用不会延长其生存期
- 对 const 引用参数使用默认值会导致崩溃
- 在运算符重载中使用带有 const 引用的 friend 函数
- C++通过 const 引用传递时不调用派生类函数
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 为什么要返回对小类成员的 const 引用?
- C - 最好将枚举类作为值或const引用
- RVO:返回由值传递的值,即使显式分配给 const 引用也是如此
- const引用与可变成员的对象
- 每当传递lvalue时,每当通过rvalue传递时,将const引用存储
- 对类成员而不是 getter 的 Const 引用
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- STD ::配对的const引用如何工作
- 为什么我的C 函数拒绝返回const引用