2012-10-29 3 views
3

최근에 C++ 클래스로 작업하기 시작했으며 오류가 발생했을 때 막 시작했습니다. 두 클래스의 클래스 정의가 포함 된 "resource.h"파일이 있습니다 : 'deck'및 'card'. I #include 다른 파일 인 "card.cpp"에이 파일을 저장합니다. card.cpp 파일에서 'card'클래스의 모든 메소드/함수를 설명했습니다. 그러나 컴파일에 나는 다음과 같은 오류 (참고로 내가 명령 줄의는 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() {} 

은 "자원을. 시간 "파일 :

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'의 ++를 금지 선언입니다 C : void Card::setCard(char, char)

당신이 생각하기에 이상했다면, 템플렛에 가면 꽉 잡으십시오. 컴파일러는 큰 오류 메시지를 생성 한 기록을 가지고 있습니다.

+0

정말 고마워! 그러나 "무효"키워드를 추가해야하는 이유는 무엇입니까? 클래스 정의에서 나는 이미 "setCard"가 void를 반환 할 것이라고 지정했습니다. – Nigh7Sh4de

+0

@Guitarroka "규칙이에요"와 같이 쉽습니다 ... –

+0

eheh ... 어쨌든 고마워요 :) – Nigh7Sh4de