J'utilise une variable statique en tant que temporisateur de décalage dans une petite partie de jeu (projet de cours). La variable conserve la trace du nombre de tours avant qu'un effet d'état ne disparaisse. Voici le code:std :: out_of_range sur une variable statique int
for (auto &i : v) // <-- code that calls enemyAttack
enemyAttack(i, p, str, i.attack);
break;
void enemyAttack(Enemy &e, playerObject &p, std::array<std::string, NUM_MESSAGES> &str, void(*a)(playerObject &p, std::array<std::string, NUM_MESSAGES> &str)) {
int die = rand() % 100 + 1;
int d = 1;
a(p, str); // <-- Call function which causes the error
...
}
void batAttack(playerObject &p, std::array<std::string, NUM_MESSAGES> &str) {
static int time = 2;
static bool bit = false;
if (rand() % 10 < CHANCE_OF_STATUS_EFFECT && !bit) {
p.damage /= 2;
str[STATUS] += "WEAKENED ";
bit = true;
}
else if (time == 0) {
p.damage *= 2;
str[STATUS].replace(str[STATUS].find("WEAKENED ", 0), 9, "");
time = 2; // <-- error
bit = false;
}
else if (bit) {
time--;
}
}
Je reçois un std :: erreur de out_of_range à la ligne time = 2;
dans la deuxième condition. Cette fonction est appelée via un pointeur de fonction à partir d'une fonction d'attaque primaire. L'erreur semble être aléatoire et MSVS signale toutes les variables ayant la valeur qu'elles devraient avoir quand l'erreur se produit.
Qu'est-ce que «STATUS»? Qu'est-ce que "NUM_MESSAGES"? Quelles sont leurs valeurs? S'il vous plaît essayez de créer un [Minimal, ** Complete **, et un exemple vérifiable] (http://stackoverflow.com/help/mcve) et nous montrer. –
En outre, que pensez-vous que se passe si 'str [STATUS] .find (" WEAKENED ", 0)' ne trouve pas la chaîne que vous cherchez? Même si quelque chose est censé "ne jamais arriver", ça le sera toujours! –
Vous n'avez pas par hasard plusieurs threads qui seraient en train d'essayer d'accéder à cette variable statique en même temps? – 9Breaker