命名規則のいくつかが混乱を引き起こしていると思います。上で指摘したように、コンストラクターに渡されるスーツとフェイスバリューの引数でコンテキストの問題に直面しています。つまり、コンストラクター メソッドのコンテキストでは、スーツは実際には、クラス Card のメンバー変数であるスーツよりも、引数として渡されるスーツを意味します。人々は通常、この混乱を避けるのに役立つ命名規則を使用します。たとえば、スーツが m_suit になるように、クラスの各データ メンバーの前にm_を配置します。好きなものを使用できますが、そうすると、他のコードの誰かが m_suit がデータ メンバーであることがすぐにわかります。
もう 1 つのポイントは、コンストラクターのコードが実行される前に、クラスのデータ メンバーを初期化できることです。これは「初期化リスト」と呼ばれ、次のように行われます (上記の命名規則に変更したと仮定します)。
Card::Card (Suit suit, Value facevalue)
: m_suit (suit), m_facevalue (facevalue)
{
// no code needs to go here
}
効率的な理由から、この習慣を身につけることをお勧めします。さらに、thisポインターをコンストラクターで使用することは、一般的には良い考えではありません。違法ではありませんが、トラブルに巻き込まれる可能性があります。
ドット演算子が機能しない限り、ドット演算子を使用している場所が正確に質問から明確ではありませんでした。上記の::構文を参照している場合、それは実際には演算子ではなく、クラスを逆参照していることを示す C++ 構文の一部です。suitおよびfacevalueデータ メンバーをstaticとして宣言した場合、この構文は機能しますが、それはやりたいことではありません。
複数のヘッダー ファイルで Card クラスを宣言しているとのことですが、これも悪いことです。