我一直在尝试为链接的排序列表重载等于(==)和小于(<)运算符。我不确定我是否理解我所做的事情是否合理。我有一个带有DestinationCity字符串变量的结构,这些运算符必须进行比较。我使用strcmp试图让它工作。这是代码:
bool sortedListClass::operator <(const flightRec& rhs) const{
if (strcmp(flightRec.DestinationCity, rhs.DestinationCity) < 0)
{ // I'm not sure if flightRec.DestionationCity is what I should write.
return true;
}
else
return false;
}
bool sortedListClass::operator ==(const flightRec& rhs) const{
if (strcmp(flightRec.DestinationCity, rhs.DestinationCity) == 0)
{
return true;
}
else
return false;
}
以下是错误消息。
sortedListClass.cpp:在成员函数'bool sortedListClass :: operator&lt;(const flightRec&amp;)const'中: sortedListClass.cpp:185:25:error:在'。'标记
之前的预期primary-expressionsortedListClass.cpp:在成员函数'bool sortedListClass :: operator ==(const flightRec&amp;)const'中: sortedListClass.cpp:194:28:error:在'。'标记
之前的预期primary-expression
答案 0 :(得分:3)
//我不确定是否 flightRec.DestionationCity就是我 应该写。
你不应该:-)。如果要在某个类上定义operator<
,则不要在容器类中执行此操作,而是在要比较的对象类中执行此操作。这里是flightRec
。
bool flightRec::operator< (const flightRec& other) {
// compare this and other
if (strcmp(this->DestinationCity, other.DestinationCity))
...
}
答案 1 :(得分:0)
如果您still使用std::string
,请不要与strcmp
进行比较。 ==
和<
都在string
上定义。
答案 2 :(得分:0)
如果要保留没有成员的'struct',可以将二元运算符定义为非成员:
bool operator <(const flightRec& lhs, const flightRec& rhs)
{
if (strcmp(lhs.DestinationCity, rhs.DestinationCity) < 0)
return true;
else
return false;
}