2012-10-13 2 views
4

그래서 저는 C++로 작은 게임을 만들고 문제를 뛰어 넘었습니다. 내 player.h 파일 안에 player라는 클래스가 있고이 클래스 안에는 getPotion()이라는 공용 함수가 있습니다. 또한 potion이라는 개인 정적 변수가 있습니다. 플레이어의 건강에 똑같은 것이 있습니다. getHealth() 함수는 private static int playerHealth을 완벽하게 반환합니다. 그러나 분명히 이유가 없기 때문에, getPotion 함수는 그 물약을 반환하지 않습니다. 대신 오류가 발생합니다. 다른 모든 파일에도 헤더 파일을 포함 시켰습니다. 여기 작동하지 않는 클래스에서 개인 변수를 반환하는 함수를 호출

코드입니다 :

(미안 해요, 난 코드를 삽입하는 방법을 모른다, 그래서 그것을 밖으로 작성해야합니다)

player.h (코드가 나는 데 그 에 문제) :

class Player{ 
private: 
    static int potions; 

public: 
    int getPotions(); 
} 

player.cpp (다시 코드 나는에 문제가) :

int Player::potions; 

int Player::getPotions(){ 
    Player player; 
    return player.potions; 
} 

나는 돌아가는 등의 약간의 코드를 생략했을 것입니다. 그러나이 질문을 할 시간이별로 없기 때문에 그것이 내 문제와 관련된 부분을 넣었습니다.

+0

가 왜 만듭니 까 'getPotions' 함수의 새로운'Player'? 어떤 사고 과정을 통해 그것이 합리적인 것으로 생각하게 만들었지 만 재검사가 필요합니다. –

+2

또한, 거의 확실하게''potions''가'static'으로 선언되기를 원하지 않습니다. –

+0

@ Robᵩ : 맞아. 플레이어가 두 명이라면, 각각의 포션 개수가 필요합니다. 따라서 정적이 아니어야합니다. –

답변

6

먼저 객체의 인스턴스화 된 것처럼 마치 static 클래스 멤버를 반환하려고합니다. 정적 멤버는 Class::member이 아니라 object.member이 아닙니다.

둘째로, 나는 당신이 potions을 정적이라고 생각하지 않는다고 생각합니다. 정적 멤버는 클래스의 모든 객체간에 공유됩니다. 그래서 만약 플레이어 A가 100의 체력을 가지고 있다면, 플레이어 B는 같은 체력의 포션을 갖게됩니다.

세 번째로 .cpp 파일 상단에 Player::potions을 선언합니다. 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다. potions 회원은 이미 .h 파일에 신고되었습니다.

player.h :

class Player 
{ 
    private: 
     int potions; 

    public: 
     int getPotions(); 
}; 

player.cpp :

int Player::getPotions() 
{ 
    return potions; 
} 

당신이 potions 정적되고 싶지 않은 경우, 다음으로 변경 :

return Player::potions; 
+0

지금은 정말 바보 같아요 ... 고마워, 효과가 있어요 – CMP6LG

+0

다행 이네! –

1

시도

Player player; 
return player.potions; 

단순히

return potions; 

당신은 새로운 선수를 만들고 해당 개체의 묘약은 "이"개체 아닌 묘약을 반환하고하는 변화.

+0

'potions'는 정적입니다. 자신의 클래스가 설계된 방식으로 인스턴스에는 포션이 없습니다. –

+0

@DavidSchwarts,이 문제도 수정해야합니다. 내 감시. – jedwards

관련 문제