Функции C не объявлены?

#c #function

#c #функция

Вопрос:

Я пытаюсь создать игру в командной строке и объявляю эти две функции, но когда я вызываю playerAttack(); сообщение о сборке, в нем говорится error: playerAttack start was not declared in this scope , что я объявил функции playerAttack() и cpuAttack() перед int main() {...} функцией, если это поможет. Пожалуйста, помогите, заранее благодарю вас.

 void cpuAttack() {
    if (playerHealth > 0 amp;amp; cpuHealth > 0) {
        cout << "Attack Direction (left, right, or center): ";
        cin >> attack;
        cout << name << " attacks from the " << attack << endl;
        srand(time(0));
        cpuBlock = attDir[rand() % 2];
        cout << "CPU-1 blocks the " << cpuBlock << endl;
        if (attack != cpuBlock) {
            cpuHealth - dmg;
        } else {cpuHealth = cpuHealth - (dmg   20);}
        playerAttack();
    } else if (playerHealth > 0 amp;amp; cpuHealth <= 0) {
        cout << "n" << name << " has won the game.n";
    } else if (playerHealth <= 0 amp;amp; cpuHealth > 0) {
        cout << "nCPU-1 has won the game.n";
    }
}
  

и

 void playerAttack() {
    if (playerHealth > 0 amp;amp; cpuHealth > 0) {
        cout << "Attack Direction (left, right, or center): ";
        cin >> attack;
        cout << name << " attacks from the " << attack << endl;
        srand(time(0));
        cpuBlock = attDir[rand() % 2];
        cout << "CPU-1 blocks the " << cpuBlock << endl;
        if (attack != cpuBlock) {
            cpuHealth - dmg;
        } else {cpuHealth = cpuHealth - (dmg   20);}
        cpuAttack();
    } else if (playerHealth > 0 amp;amp; cpuHealth <= 0) {
        cout << "n" << name << " has won the game.n";
    } else if (playerHealth <= 0 amp;amp; cpuHealth > 0) {
        cout << "nCPU-1 has won the game.n";
    }
}
  

Комментарии:

1. Вы playerAttack говорите, что объявляли раньше main , но объявляли ли вы это раньше cpuAttack ?

2. @immibis, когда я объявляю это до cpuAttack того, как получу error: cpuAttack was not declared in this scope .

Ответ №1:

Поскольку две функции взаимно зависят друг от друга, одна из них должна уже знать о другой, прежде чем она будет определена. Решение состоит в том, чтобы объявить их до определения:

 void cpuAttack();
void playerAttack();

// now define them ...
  

В качестве альтернативы, вы могли бы избавиться от взаимной зависимости, позволив чему-то другому управлять чередованием и, таким образом, не накладывать вызовы друг на друга (что в некоторых случаях может привести к переполнению стека).