2012-10-29 87 views
3

我最近开始使用C++类,并在出现错误时刚刚启动。我有一个“resource.h”文件,其中包含两个类的类定义:'deck'和'card'。 I #include将此文件放在另一个文件“card.cpp”中。在card.cpp文件中,我描述了'card'类的所有方法/函数。但是在编译我收到以下错误(FYI我使用MinGW的编译器命令行):C++类方法声明返回错误

card.cpp:3:29: error: ISO C++ forbids declaration of 'setCard' with no type [-fp ermissive] card.cpp:3:1: error: prototype for 'int Card::setCard(char, char)' does not matc h any in class 'Card' resource.h:9:8: error: candidate is: 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() {} 

“资源。 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]; 
}; 

是什么原因造成这个问题,为什么在世界上没有编译器认为‘卡:: setChard()’是一个int

+3

你在'Card :: setCard'之前缺少返回类型。 – avakar

回答

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

应该

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

一些提示,帮助我得到这个惊人的结论:

  • 下与无型 'setCard' 的++者禁用声明
  • 候选人是:void Card::setCard(char, char)

如果您认为这很神秘,当你到达模板时紧紧抓住它。编译器有一个为他们生成重大错误消息的历史。

+0

非常感谢它的工作!但为什么我需要添加“void”关键字?在类定义中,我已经指定“setCard”将返回void? – Nigh7Sh4de

+0

@Guitarroka就像“这就是规则”一样简单...... –

+0

eheh ...非常感谢:) – Nigh7Sh4de