3

最近、C ++クラスの操作を開始し、エラーが発生したときに開始しました。'deck'と'card'の2つのクラスのクラス定義を含む"resource.h"ファイルがあります。このファイルを#include別のファイル「card.cpp」に追加しました。card.cppファイルでは、「card」クラスのすべてのメソッド/関数について説明しました。ただし、コンパイル時に次のエラーが発生します(コマンドラインにMinGWコンパイラを使用しています)。

card.cpp:3:29:エラー:ISO C ++は、タイプなしの「setCard」の宣言を禁止します[-fp ermissive] card.cpp:3:1:エラー:「intCard :: setCard(char、char)」のプロトタイプクラス'Card'のリソースに一致しません。h:9:8:エラー:候補は:void Card :: setCard(char、char)

「card.cpp」ファイル:

#include "resource.h"

Card::setCard(char f, char s) {
    face = f;
    suit = s;
}

Card::Card (char face, char suit) {
    setCard(face, suit);
}

Card::~Card () {}

「resource.h」ファイル:

typedef unsigned short int UINT;
class Card;
class Deck;

class Card {
    public:
        Card(char face, char suit);
        ~Card();        
        void setCard(char face, char suit);
        char getFace() const { return face; }
        char getSuit() const { return suit; }
    private:
        char face;
        char suit;
};

class Deck {
    public:
        Deck();
        ~Deck();
        Card getCard(UINT x);

    private:
        Card myCards[54];
};

この問題の原因と、コンパイラが「Card :: setChard()」をint

4

1 に答える 1

8
Card::setCard(char f, char s) {
    face = f;
    suit = s;
}

する必要があります

void Card::setCard(char f, char s) {
    face = f;
    suit = s;
}

この驚くべき結論に到達するのに役立ったいくつかのヒント:

  • C ++は、タイプのない「setCard」の宣言を禁止します
  • 候補者は:void Card::setCard(char, char)

これが不可解だと思った場合は、テンプレートにたどり着くまでしっかりと待ってください。コンパイラには、優れたエラーメッセージを生成してきた歴史があります。

于 2012-10-29T14:59:06.713 に答える