C ++ перегруженный оператор связал отсортированный список ADT - PullRequest
1 голос
/ 28 марта 2011

Я пытался перегрузить операторы равенства (==) и меньше (<) для связанного отсортированного списка. Я не уверен, понимаю ли я точно, имеет ли смысл то, что я делаю. У меня есть структура со строковой переменной для DestinationCity, с которой эти операторы должны сравнивать. Я использовал strcmp в попытке заставить его работать. Вот код: </p>

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 <(const flightRec &) const': sortedListClass.cpp: 185: 25: ошибка: ожидаемое первичное выражение до токена ‘.’ </p>

sortedListClass.cpp: в функции-члене bool sortedListClass :: operator == (const flightRec &) const ’: sortedListClass.cpp: 194: 28: ошибка: ожидаемое первичное выражение до токена ‘.’

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

// Я не уверен, если flightRec.DestionationCity - это то, что я следует написать.

Вы не должны :-). Если вы хотите определить operator< для какого-то класса, вы делаете это не в классе контейнера, а в классе, какие объекты вы хотите сравнить. Вот это было бы flightRec.

bool flightRec::operator< (const flightRec& other) {
   // compare this and other
   if (strcmp(this->DestinationCity, other.DestinationCity))
   ...
}
0 голосов
/ 28 марта 2011

Если вы хотите оставить «struct» без элементов, вы можете определить бинарный оператор как не член:

bool operator <(const flightRec& lhs, const flightRec& rhs) 
{
   if (strcmp(lhs.DestinationCity, rhs.DestinationCity) < 0)
        return true;
    else
        return false;
}
0 голосов
/ 28 марта 2011

Если вы все еще используете std::string, не сравнивайте с strcmp. == и < оба определены в string.

...