0

我在一个类中有一个函数,或多或少像这样工作:

class Player {
private:
    Object* minions[16]
public:
    void Summon(Object* obj);
};

Player::Summon(Object* obj) {
    static int i = 0;
    if (i == 16)
        return;
    minions[i] = obj;
    i++;
}

尝试使用多个播放器时会出现问题,如下所示:

Player playerone;
Player playerthree;
playerone.Summon(new Object("o1"));
playerthree.Summon(new Object("o2"));

o1playerone.minions[0]正如预期的那样,位于 中,但是,位于o2playerthree.minions[1]Summon()函数使用相同的i变量。有没有办法让函数对单个实例Summon()使用静态变量,但对每个实例使用单独的变量?我知道我可以做一个循环到等于的第一个点,或者直接做一个成员,但我想知道在我做这些之前是否有更好的方法。iiforminions[]NULLiPlayer

4

4 回答 4

2

更改Object* minions[16];std::vector<Object*> minions;. 这样你就可以minions.size()知道有多少,或者minions.push_back(obj);添加一个而不用担心数组索引的东西。

于 2010-12-02T22:50:40.620 回答
1

你为什么不简单地把i每个Player?我会将它重命名为summonned_minion_count,但这是您想要做的实际意图。

于 2010-12-02T22:48:28.787 回答
0

您需要将您i的成员变量设为Player.

或者更好的是你可以做这样的事情:

#include <vector>

class Player {
private:
    static int const MAX_MINION_COUNT = 16;
    std::vector<Object *> minions;
public:
    void Summon(Object* obj) {
        if (minions.size() < MAX_MINION_COUNT) {
            minions.push_back(obj);
        }
    }
};
于 2010-12-02T22:48:12.630 回答
0

将局部变量设为静态实际上就是将其设为全局变量。您应该简单地创建i一个数据成员class Player。并且可能给它一个更具描述性的名称。

于 2010-12-02T22:48:17.120 回答