2011-08-24 5 views
2

다음 클래스가 있습니다."다중 정의"오류. 내가 뭘 잘못하고 있죠?

class Character 
{ 
public: 
    Character(); 
    Character(std::string char_name, Race char_race, Gender char_gender); 
    ~Character(); 

    int get_id() { return this->char_id; } 
    std::string get_name() { return this->name; } 
    Race get_race() { return this->race; } 
    Gender get_gender() { return this->gender; } 

private: 
    int char_id; 
    static int * char_count; 
    std::string name; 
    Race race; 
    Gender gender; 
}; 
int * Character::char_count = 0; 
#endif // CHARACTER_H 

클래스 외부에서 초기화되는 정적 필드를 유의하십시오.

구현은 다음과 같습니다.

Character::Character() 
{ 
    this->char_id = *char_count; 
    char_count++; 
} 

Character::Character(std::string char_name, Race char_race, Gender char_gender) 
{ 
    this->char_id = *char_count; 
    char_count++; 
    this->name = char_name; 
    this->race = char_race; 
    this->gender = char_gender; 
} 

Character::~Character() 
{ 

} 

분명히 제 컴파일러는이 점을 좋아하지 않습니다. 생성 된 오류는 "Character :: char_count의 다중 정의"이지만 여러 정의가 없습니다.

???

+0

더 긴 버전의 오류 메시지를 게시하십시오. –

+0

실제 코드에서 Include Guard'# ifdef' /'# define'이 정말로 빠졌습니까? – sharptooth

답변

4

정적 필드

int * Character::char_count = 0; 

의 초기화는 .cpp 파일이어야한다. 그렇지 않으면 다음과 같은 일이 발생합니다. 하나 이상의 .cpp 파일에 .h 파일이 포함되면 정적 필드에 대한 두 가지 정의가 있으며 나중에 링크 오류가 발생합니다. 포함 경비원은 여기에 도움이되지 않습니다. 다른 .cpp 파일이 아닌 동일한 .cpp 파일에 여러 개의 포함이 금지됩니다.

+0

음 ... 나는 그것을 시도했지만 여전히 많은 것을 얻지 못했다. 나는 같은 오류가있다. 다른 아이디어? – zeboidlund

+0

@Holland : .h 파일에서 이니셜 라이저를 제거 했습니까? – sharptooth

+0

예, 있습니다. 아직 아무것도 :/ – zeboidlund

관련 문제