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