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

时间:2013-04-18 06:12:55

标签: c++ string operator-overloading

使用我的字符串类获取另一个错误。 intellisense不允许我使用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;
}

3 个答案:

答案 0 :(得分:3)

您正在返回对局部变量的引用。按价值返回。您还可以简化返回表达式,并创建方法const,因为比较两个对象不应更改其中任何一个:

bool String::operator<(const String & obj) const {
  return strcmp(*this, obj) < 0;
}

虽然我不确定strcmp可以处理两个String,这就是你传递的内容。根据您之前的问题判断,您需要

return strcmp(mstr, obj.mStr) < 0;

<击>

答案 1 :(得分:1)

将其设为const并移除&

bool String::operator<(const String & obj) const
                                           ^^^^^

返回对临时对象的引用会导致未定义的行为。

答案 2 :(得分:0)

错误消息明确指向strcmp()的第一个参数,*这是一个右值,但是strcmp需要一个左值,尝试在之前添加一个句子:

String thisObj = *this;