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