错误:非const引用的初始值必须是左值
对我的字符串类有另一个错误。 intellisense不会让我使用strcmp来比较一个对象与自我调用对象(即* this)。错误:非const引用的初始值必须是左值
我试着让自己的操作符转换函数来帮助这个,但它仍然给我错误。
我需要更改我的代码才能使其工作?
//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,这就是你正在通过它。从以前的问题Judgning,你需要
return strcmp(mstr, obj.mStr) < 0;
但他有一个'运算符char const *()const',所以我认为他可以直接把它放在strcmp中。 – Detheroc 2013-04-18 06:24:05
@Dheheroc谢谢,我完全错过了。 – juanchopanza 2013-04-18 06:27:36
让它const
并删除&
bool String::operator<(const String & obj) const
^^^^^
返回临时对象的引用会导致不确定的行为。
错误消息明确指出的strcmp()
第一个参数,*这是一个右值,但STRCMP需要一个左值,尝试添加一个句子前:
String thisObj = *this;
这根本不正确。 – 2013-08-24 19:14:14
为什么?你能告诉更多吗? – 2014-03-15 06:15:32
'*这'不是一个右值。特别是,你知道它的地址(这是'this')。右值是由隐式调用'String :: operator char const *()const'创建的临时值。 – 2014-03-15 13:09:42
为什么返回从这个'布尔&',它没有意义。只需返回一个“布尔”。 – Yuushi 2013-04-18 06:14:30