5

私はStanfordCS106BC ++の割り当てを処理していますが、割り当てに「セマンティックの問題」があります。

コンパイラは、呼び出しが関数に対するものなのか、関数のプロトタイプに対するものなのかを推測できないようです。なぜプロトタイプに電話がかかるのかわかりません。プロトタイプではなく関数を呼び出すようにするにはどうすればよいですか?「'humansTurn'への呼び出しはあいまいです」というエラーメッセージが表示されます。

エラーメッセージは、ページ下部のhumansTurn(Lexicon、Lexicon)関数内のhumansTurn(Lexicon、Lexicon)関数の呼び出しに関連しています。この関数のプロトタイプは、メイン関数の上にあります。

どんな助けでも大歓迎です。

敬具、

メフル

    /*
     * File: Boggle.cpp
     * ----------------
     */

    #include <iostream>
    #include "gboggle.h"
    #include "graphics.h"
    #include "grid.h"
    #include "vector.h"
    #include "lexicon.h"
    #include "random.h"
    #include "simpio.h"
    using namespace std;

    /* Constants */

    const int BOGGLE_WINDOW_WIDTH = 650;
    const int BOGGLE_WINDOW_HEIGHT = 350;

    const string STANDARD_CUBES[16]  = {
       "AAEEGN", "ABBJOO", "ACHOPS", "AFFKPS",
       "AOOTTW", "CIMOTU", "DEILRX", "DELRVY",
       "DISTTY", "EEGHNW", "EEINSU", "EHRTVW",
       "EIOSST", "ELRTTY", "HIMNQU", "HLNNRZ"
    };

    const string BIG_BOGGLE_CUBES[25]  = {
       "AAAFRS", "AAEEEE", "AAFIRS", "ADENNN", "AEEEEM",
       "AEEGMU", "AEGMNN", "AFIRSY", "BJKQXZ", "CCNSTW",
       "CEIILT", "CEILPT", "CEIPST", "DDLNOR", "DDHNOT",
       "DHHLOR", "DHLNOR", "EIIITT", "EMOTTT", "ENSSSU",
       "FIPRSY", "GORRVW", "HIPRRY", "NOOTUW", "OOOTTU"
    };

    /* Function prototypes */

    void welcome();
    void giveInstructions();
    // Create random board
    static Grid <char> randomBoard();
    // Create custom board
    static Grid<char> customBoard();
    static void drawAndFillBoard(Grid<char>);
    static void humansTurn(Lexicon,Lexicon);

    int main() {
        initGraphics(BOGGLE_WINDOW_WIDTH, BOGGLE_WINDOW_HEIGHT);
        welcome();
        giveInstructions();
        string custom = getLine("Type y to create custom board:" );
        Grid<char> gridData;
        if (custom=="y"){
            gridData = customBoard();
        } else {
            gridData = randomBoard();
            }
        drawAndFillBoard(gridData);
        Lexicon english("EnglishWords.dat");
        // Lexicon holds words previously encountered
        Lexicon previousWords;
        humansTurn(english, previousWords);
        return 0;
    }

    /*
     * Function: welcome
     * Usage: welcome();
     * -----------------
     * Print out a cheery welcome message.
     */

    void welcome() {
       cout << "Welcome!  You're about to play an intense game " << endl;
    }

    /*
     * Function: giveInstructions
     * Usage: giveInstructions();
     * --------------------------
     * Print out the instructions for the user.
     */

    void giveInstructions() {
       cout << endl;
       cout << "The boggle board is a grid onto which I ";
       cout << "or triple your paltry score." << endl << endl;
       cout << "Hit return when you're ready...";
       getLine();
    }

    static Grid<char> randomBoard(){
        Vector<string> standardCubes;
        for(int i = 0; i<16;i++){
            standardCubes.add(STANDARD_CUBES[i]);
        }
        // Shuffle cubes
        for (int i = 0; i < standardCubes.size(); i++) {
            int r = randomInteger(i, standardCubes.size()-1);
            if (i!=r){
                string stringToMove1 = standardCubes.get(i);
                string stringToMove2 = standardCubes.get(r);
                standardCubes.set(r, stringToMove1);
                standardCubes.set(i, stringToMove2);
            }
        }
        // Update grid with random side of cube
        Grid<char> gridData(4, 4);
        int counter = 0;
        for (int columnNo = 0; columnNo <4; columnNo++){
            for (int rowNo = 0; rowNo<4; rowNo++) {
                string s = standardCubes.get(counter);
                int r = randomInteger(0, 5);
                gridData[columnNo][rowNo] = s[r];
                counter++;
            }
        }
        return gridData;
    }

    static Grid<char> customBoard(){
        Grid<char> gridData(4,4);
        string s = getLine("Please enter 16 characters to make up the custom board. Characters will fill the board left to right, top to bottom: ");
        for (int i = 0; i < s.length(); i++) {
            s[i] = toupper(s[i]);
        }
        if (s.length()<16){
            cout << "String has to be 16 characters long, try again" << endl;
            customBoard();
        }
        int i =0;
        for (int columnNo = 0; columnNo <4; columnNo++){
            for (int rowNo = 0; rowNo<4; rowNo++) {
                gridData[columnNo][rowNo] = s[i];
                i++;
            }
        }

        return gridData;
    }

    static void drawAndFillBoard(Grid<char> gridData){
        drawBoard(4, 4);
        for (int columnNo = 0; columnNo <4; columnNo++){
            for (int rowNo = 0; rowNo<4; rowNo++) {
                labelCube(rowNo, columnNo, gridData[rowNo][columnNo]);
            }
        }
    }

    static void humansTurn(Lexicon englishWords, Lexicon &previousWords){
        /*
         Human’s turn (except for finding words on the board). Write the loop that allows the user to enter words. Reject words that have already been entered or that don’t meet the minimum word length or that aren’t in the lexicon. Use the gboggle functions to add words to the graphical display and keep score.
         */

        string humanGuess = getLine("Please enter your guess: ");
        for (int i = 0; i < humanGuess.length(); i++) {
            humanGuess[i] = tolower(humanGuess[i]);
        }
        if (humanGuess.length()<4){
            cout << "Min guess length is four characters" << endl;
            humansTurn(englishWords, previousWords);
        }
        if (!englishWords.contains(humanGuess)) {
            cout << "That word is not English, please try another word" << endl;
            humansTurn(englishWords, previousWords);
        }
        if (previousWords.contains(humanGuess)){
            cout << "That word has already been guessed, please try another word" << endl;
            humansTurn(englishWords, previousWords);
        }
        // check if word can be made using data on board

    }
4

1 に答える 1

10

関数humansTurn定義には、宣言付きの異なるシグネチャがあります

関数宣言:

static void humansTurn(Lexicon,Lexicon);

関数の定義:

static void humansTurn(Lexicon englishWords, Lexicon &previousWords) 
                                                     ^^
                                                     //Here
于 2013-01-27T11:24:52.143 に答える