C ++重载操作符链接排序列表ADT

时间:2011-03-27 22:49:08

标签: c++ operator-overloading adt

我一直在尝试为链接的排序列表重载等于(==)和小于(<)运算符。我不确定我是否理解我所做的事情是否合理。我有一个带有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-expression      

sortedListClass.cpp:在成员函数'bool sortedListClass :: operator ==(const flightRec&amp;)const'中:   sortedListClass.cpp:194:28:error:在'。'标记

之前的预期primary-expression

3 个答案:

答案 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;
}