错误:非const引用的初始值必须为左值

Error: Initial value of reference to non-const must be an lvalue

本文关键字:const 引用 错误      更新时间:2023-10-16

字符串类又出错了。智能感知不允许我使用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;