Прототипы функций мешают компилятору видеть определение? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь написать код для игры «Камень, Бумага, Ножницы, Ящерица, Спок» как часть лаборатории для моего класса. В других программах я с некоторым успехом использовал прототипы функций, но когда я делаю это здесь, это не работает. Компилятор читает void-функции, если я помещаю их выше main, но мне нужно, чтобы они были определены после. Я попытался инициализировать их следующим образом

#include <iostream> // basic i/o
#include <iomanip> // output formatting
#include <cmath> // math functions
#include <cstdlib> // rand() and srand()
#include <ctime> // system time
#include <string> // string handling

using namespace std;


void playerRock();
void playerPaper();
void playerScissors();
void playerLizard();
void playerSpock();



int main(){...

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

int main(){...
}

void playerRock(void){
    cout << "Player chooses Rock" << endl;
    if(opponentChoice == 1){
        cout << "Opponent chooses Paper" << endl;
        cout << "Paper covers Rock!" << endl;
        opponentScore++;
    }
    if(opponentChoice == 2){
        cout << "Opponent chooses Scissors" << endl;
        cout << "Rock smashes Scissors!" << endl;
        playerScore++;
    }
    if(opponentChoice == 3){
        cout << "Opponent chooses Lizard" << endl;
        cout << "Rock smashes Lizard" << endl;
        playerScore++;
    }
    else{
        cout << "Opponent chooses Spock" << endl;
        cout << "Spock vaporizes Rock!" << endl;
        opponentScore++;
    }
    cout << "Opponent Score: " << opponentScore << endl;
    cout << "Player Score: " << playerScore << endl;

    return;
}

void playerPaper(void){
    cout << "Player chooses Paper!" << endl;
    if(opponentChoice == 0){
        cout << "Opponent chooses Rock" << endl;
        cout << "Paper covers Rock!" << endl;
        playerScore++;
    }
    if(opponentChoice == 2){
        cout << "Opponent chooses Scissors" << endl;
        cout << "Scissors cuts Paper!" << endl;
        opponentScore++;
    }
    if(opponentScore == 3){
        cout << "Opponent chooses Lizard" << endl;
        cout << "Lizard eats Paper!" << endl;
        opponentScore++;
    }
    else{
        cout << "Opponent chooses Spock" << endl;
        cout << "Paper disproves Spock!" << endl;
        playerScore++;
    }
    cout << "Opponent Score: " << opponentScore << endl;
    cout << "Player Score: " << playerScore << endl;

    return;
}

void playerScissors(void){
    cout << "Player chooses Scissors" << endl;
    if(opponentChoice == 0){
        cout << "Opponent chooses Rock" << endl;
        cout << "Rock smashes Scissors" << endl;
        opponentScore++;
    }
    if(opponentChoice == 1){
        cout << "Opponent chooses Paper" << endl;
        cout << "Scissors cuts Paper!" << endl;
        playerScore++;
    }
    if(opponentChoice == 3){
        cout << "Opponent chooses Lizard" << endl;
        cout << "Scissors decapitate Lizard!" << endl;
        playerScore++;
    }
    else{
        cout << "Opponent chooses Spock" << endl;
        cout << "Spock smashes Scissors!" << endl;
        opponentScore++;
    }
    cout << "Opponent Score: " << opponentScore << endl;
    cout << "Player Score: " << playerScore << endl;

    return;

}

void playerLizard(void){
    cout << "Player chooses Lizard" << endl;
    if(opponentChoice == 0){
        cout << "Opponent chooses Rock" << endl;
        cout << "Rock smashes Lizard" << endl;
        opponentScore++;
    }
    if(opponentChoice == 1){
        cout << "Opponent chooses Paper" << endl;
        cout << "Lizard eats Paper!" << endl;
        playerScore++;
    }
    if(opponentChoice == 2){
        cout << "Opponent chooses Scissors" << endl;
        cout << "Scissors decapitates Lizard" << endl;
        opponentScore++;
    }
    else{
        cout << "Opponent chooses Spock" << endl;
        cout << "Lizard poisons Spock!" << endl;
        playerScore++;
    }
    cout << "Opponent Score: " << opponentScore << endl;
    cout << "Player Score: " << playerScore << endl;

    return;
}

void playerSpock(void){
    cout << "Player chooses Spock" << endl;
    if(opponentChoice == 0){
        cout << "Opponent chooses Rock" << endl;
        cout << "Spock vaporizes Rock!" << endl;
        playerScore++;
    }
    if(opponentChoice == 1){
        cout << "Opponent chooses Paper" << endl;
        cout << "Paper disproves Spock" << endl;
        opponentScore++;
    }
    if(opponentChoice == 2){
        cout << "Opponent chooses Scissors" << endl;
        cout << "Spock breaks Scissors!" << endl;
        playerScore++;
    }
    else{
        cout << "Opponent chooses Lizard" << endl;
        cout << "Lizard poisons Spock!" << endl;
        opponentScore++;
    }
    cout << "Opponent Score: " << opponentScore << endl;
    cout << "Player Score: " << playerScore << endl;

    return;
}

Я думаю, я не понимаю, почему это будет работать в других программах, но не здесь?

1 Ответ

0 голосов
/ 07 апреля 2020

Объявление функции должно быть видно в месте ее использования. Если вы звоните playerRock в main, то у вас должно быть как минимум объявление из playerRock до main. Вы можете определить (записать фактическое тело функции) в другом месте, например, после main, как вы это сделали.

void playerRock();

Это объявление из playerRock.

void playerRock() {
 // something
}

Это определение из playerRock.

Также обратите внимание, что вам не нужен void в списке параметров функции в c ++.

...