3

我最近开始使用 C++ 类,并在遇到错误时才开始。我有一个“resource.h”文件,其中包含两个类的类定义:“deck”和“card”。我#include将此文件放在另一个文件“card.cpp”中。在 card.cpp 文件中,我描述了“card”类的所有方法/功能。但是在编译时,我收到以下错误(仅供参考,我正在使用 MinGW 编译器进行命令行):

card.cpp:3:29:错误:ISO C++ 禁止声明没有类型的“setCard” [-fp ermissive] card.cpp:3:1:错误:“int Card::setCard(char, char)”的原型与“卡”类资源中的任何内容不匹配。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 回答