2012-10-13 58 views
4

因此,我正在C++中製作一個小遊戲,並且遇到了問題。我在我的player.h文件中有一個名爲player的類,在這個類中我有一個名爲getPotion()的公共函數。我也有一個私有的靜態變量potion。對於球員的健康狀況我有完全相同的東西,並且getHealth()函數完美地返回私有靜態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

另外,你幾乎可以肯定**不要**'魔藥'被宣佈爲'靜態'。 –

+0

@Robᵩ:沒錯。如果有兩個'玩家',每個人都需要自己的魔藥數量。所以它不應該是靜態的。 –

回答

6

首先,您嘗試返回一個類的static成員,就好像它是對象的實例化成員一樣。靜態成員由Class::member引用,而不是object.member

其次,我不認爲你想要potions是靜態的。靜態成員在類的所有對象之間共享。所以如果玩家A擁有100種生命藥水,那麼玩家B將擁有相同的100種生命藥水。

第三,您在.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

'藥水'是靜態的。他的課程設計的方式,實例沒有藥水。 –

+0

@DavidSchwarts,這也需要修復。我的疏忽。 – jedwards