2

課題の場合、生徒はカードのスーツ、ランク、ビットマップを保持する Card 構造体を作成する必要があります。この構造体は、オーバーロードされた "<" 演算子を必要とし、lhs カードのランクが rhs カードより小さいかどうかを比較して bool を返します。これまでのところ、これは私の Card.h ファイルです。

#pragma once

#include "GameEngine.h"

struct Card
{

public:
//Constructor and Destructor
Card();
virtual ~Card();

//Methods
bool operator< (const Card& lhs, const Card& rhs)
{
    return (lhs.m_Rank < rhs.m_Rank);
}

//Enumerations
enum class Suit
{
    Diamonds,
    Clubs,
    Hearts,
    Spades,
};

enum class Rank
{
    RankAce,
    RankTwo,
    RankThree,
    RankFour,
    RankFive,
    RankSix,
    RankSeven,
    RankEight,
    RankNine,
    RankTen,
    RankJack,
    RankQueen,
    RankKing,
};

private:
//Datamembers
Bitmap *m_BmpPtr;
Rank m_Rank;
Suit m_Suit;
};

ただし、 operator< オーバーロードは、パラメーターが多すぎると主張しています。これは、1 つのオーバーロードで lhs と rhs の両方を比較できるようにする正しい方法ではないでしょうか? 分けなくてもいいじゃないですか。

よろしくお願いします。

4

2 に答える 2

7

コンパイラはこれをメンバー関数と見なしますが、メンバー関数演算子は複数の引数を持つことはできません。最初の引数は暗黙的*thisで、2 番目の引数はユーザーが指定するものです。

最初の引数を取り除き、*thisin の代わりに使用することで、これをメンバー関数にすることができlhsます。それ以外の場合は、慣用的なソリューションを使用して、次のようにすることができますfriend

friend bool operator< (const Card& lhs, const Card& rhs)
{
    return lhs.m_Rank < rhs.m_Rank;
}
于 2013-10-31T14:24:43.953 に答える