-1

我的字符串类出现另一个错误。智能感知不会让我使用 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;
}
4

3 回答 3

3

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

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

虽然我不确定是否strcmp可以处理两个Strings,这就是您传递的内容。从你之前的问题来看,你需要

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

于 2013-04-18T06:14:13.797 回答
1

制作const并删除&

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

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

于 2013-04-18T06:14:30.300 回答
0

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

String thisObj = *this;
于 2013-06-14T14:14:06.987 回答