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

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"));


o1如预期的那样位于playerone.minions[0]中,但是o2位于playerthree.minions[1]中,Summon()函数使用相同的i变量。有没有一种方法可以使Summon()函数对单个实例使用静态的i变量,但对每个实例使用单独的i变量?我知道我可以做一些事情,例如使for循环到minions[]等于NULL的第一点,或者直接使i成为Player的成员,但是我想知道是否有更好的方法在我做任何一个之前。

最佳答案

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

关于c++ - 如何在类方法中创建即时依赖的静态变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4340792/

10-10 09:45