4

私は C++ で小さなゲームを作成していますが、問題が発生しました。player.h ファイル内に player というクラスがあり、このクラス内に というパブリック関数がありgetPotion()ます。と呼ばれるプライベート静的変数もありますpotion。プレイヤーの健康についてもまったく同じことがあり、getHealth()関数はプライベート静的 intplayerHealthを完全に返します。しかし、明らかに理由もなく、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;
}

return などのコードの一部を省略している可能性がありますが、これは、この質問をする時間が少ないためです。問題に関連する部分を入れます。

4

2 に答える 2

7

staticまず、オブジェクトのインスタンス化されたメンバーであるかのように、クラスのメンバーを返そうとしています。静的メンバーはClass::member、ではなく、によって参照されobject.memberます。

potions第二に、私はあなたが静的になりたいとは思わない。静的メンバーは、クラスのすべてのオブジェクト間で共有されます。したがって、プレーヤーAが100のヘルスポーションを持っている場合、プレーヤーBは同じ100のヘルスポーションを持っています。

Player::potions第三に、ファイルの先頭で宣言し.cppます。私はそれがあなたが望むものではないと思います。potionsメンバーはすでにファイルで宣言されています.h

player.h:

class Player
{
    private:
        int potions;

    public:
        int getPotions();
};

player.cpp:

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

potions静的にしたい場合は、次のように変更します。

return Player::potions;
于 2012-10-13T01:42:18.320 に答える
1

変更してみてください

Player player;
return player.potions;

単に

return potions;

新しいプレーヤーを作成し、「this」オブジェクトのポーションではなく、そのオブジェクトのポーションを返します。

于 2012-10-13T01:39:12.200 に答える