2016-10-07 2 views
-1

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

void cpuAttack() { 
    if (playerHealth > 0 && 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 && cpuHealth <= 0) { 
     cout << "\n" << name << " has won the game.\n"; 
    } else if (playerHealth <= 0 && cpuHealth > 0) { 
     cout << "\nCPU-1 has won the game.\n"; 
    } 
} 

и

void playerAttack() { 
    if (playerHealth > 0 && 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 && cpuHealth <= 0) { 
     cout << "\n" << name << " has won the game.\n"; 
    } else if (playerHealth <= 0 && cpuHealth > 0) { 
     cout << "\nCPU-1 has won the game.\n"; 
    } 
} 
+1

Вы сказали 'playerAttack' перед' main', вы говорите, но вы объявили его перед 'cpuAttack'? – immibis

+0

@immibis, когда я объявляю его перед 'cpuAttack', я получаю' error: cpuAttack не был объявлен в этой области. –

ответ

1

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

void cpuAttack(); 
void playerAttack(); 

// now define them ... 

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

Смежные вопросы