У меня проблема с перегрузкой бинарного оператора сравнения>. По замыслу предполагается, что две карты сравниваются и возвращают либо 1 (если левый аргумент больше), либо 0 (в противоположном случае).
Вот краткое описание проблемы:
class Card
включает, помимо прочего, переменные int suit
и int value
в качестве личных данных. Я объявил перегруженную операторную функцию следующим образом:
int operator>(const Card& lhs, const Card& rhs);
Поскольку ему необходим доступ к закрытым членам данных class Card
, он объявляется с квалификатором friend
в объявлении класса.
Подтверждено, что сама функция работает, как описано. Настоящая проблема заключается в предоставлении двух аргументов путем вызова функции 'getter' следующего вида:
Card &Node::getCardRef() const{
Card& ref = *c;
return ref;
}
где переменная c
имеет тип Card *
и указывает на действительный объект типа Card
. Кроме того, экземпляр class Node
представляет узел в односвязном списке.
Объединение этих двух функций следующим образом приводит к segfault (в частности, в терминах GDB "In Card & Node :: getCardRef (): this = 0x0"):
if (node.getCardRef() > node.getNext()->getCardRef()){
/* do wondrous stuff */
}
Кроме того, Card &Node::getCardRef()
, похоже, дает желаемые результаты.