二項比較演算子 > のオーバーロードに関する問題に苦しんでいます。設計上、2 枚のカードを比較して 1 (左側の引数が大きい場合) または 0 (反対の場合) を返すことになっています。
問題の簡単な説明は次のとおりです。
class Card
とりわけ、変数int suit
とint value
プライベート データ メンバーが含まれます。オーバーロードされた演算子関数を次のように宣言しました。
int operator>(const Card& lhs, const Card& rhs);
のプライベート データ メンバーにアクセスする必要があるため、クラス宣言class Card
でfriend
修飾子を使用して宣言されます。
機能自体は記載通りの動作を確認しております。本当の問題は、次の形式の「getter」関数を呼び出して 2 つの引数を提供することにあります。
Card &Node::getCardRef() const{
Card& ref = *c;
return ref;
}
ここで、変数c
は型であり、型Card *
の有効なオブジェクトを指しますCard
。また、 のインスタンスはclass Node
、片方向リストのノードを表します。
次の方法で 2 つの関数を組み合わせると、segfault が発生します (具体的には、gdb 用語で「In Card &Node::getCardRef(): this = 0x0」)。
if (node.getCardRef() > node.getNext()->getCardRef()){
/* do wondrous stuff */
}
また、分離Card &Node::getCardRef()
すると、望ましい結果が得られるようです。