C++11 在函数之间传递变量不起作用 我刚开始学C++,现在正在读一门课程。< /P>

C++11 在函数之间传递变量不起作用 我刚开始学C++,现在正在读一门课程。< /P>,c++11,C++11,我正在编写一个公牛和奶牛猜字游戏 我完成了代码,但它没有按我想要的方式工作 当我试图在两个函数之间传递变量时,它失败了 这就是代码: #include <iostream> #include <string> using namespace std; void PrintIntro(); <-- the function that passes the variable void PlayGame(); <-- the

我正在编写一个公牛和奶牛猜字游戏

我完成了代码,但它没有按我想要的方式工作

当我试图在两个函数之间传递变量时,它失败了

这就是代码:

 #include <iostream>
#include <string>

using namespace std;

void PrintIntro();         <-- the function that passes the variable
void PlayGame();           <-- the function trying to get the vriable
string PlayersGuess();

int main()
{
    // Printing the Intro and Instrations of the game
    PrintIntro();
    // Function to play our game
    PlayGame();

    return 0; // exits the application
}

    void PrintIntro()
    {
        // introduce the game
        constexpr int WORD_LENGTH = 5;
        cout << "Welcome to Bulls and Cows" << endl;
        cout << "Can you guess the " << WORD_LENGTH << " letter word I'm thinking of?" << endl;
        cout << endl;
        PlayGame(WORD_LENGTH);        <-- Taking the variable
        return;
    }

    string PlayersGuess()
    {
        // get a guess from the player
        cout << "Enter your guess: ";
        string Guess = "";
        getline(cin, Guess);
        cout << endl;
        return Guess;
    }

    void PlayGame(const int &passed)    <-- passing through here
    {
        // Game Intro
        for (int i = 0; i < passed; i++)     <-- to here
        {
            // Players Guess
            string Guess = PlayersGuess();
            cout << "Your guess is: " << PlayersGuess() << endl;
            cout << endl;
        }
    }
#包括
#包括
使用名称空间std;

void PrintIntro() 函数声明和定义的签名必须相互匹配。您需要声明如下函数:

void PlayGame(const int &passed);

在代码中,有两个不同的函数名为PlayGame。当使用参数调用PlayGame()时,编译器尚未满足相应的函数,因此会给出错误。

更改声明:

void PlayGame()
致:


声明无效游戏();在开始时不接受参数。将声明更改为接受所需类型的参数。声明和定义必须匹配。希望这有帮助。

如果你想让函数接受一个参数,你必须告诉编译器它接受一个参数

函数原型声明

void PlayGame();
告诉编译器,
PlayGame
函数不接受任何参数,也不返回任何值。如果您尝试使用与声明不匹配的参数调用它,您将得到一个错误

另一方面,如果您按照自己的定义声明:

void PlayGame(const int &passed);
然后告诉编译器该函数必须有一个参数(对常量
int
的引用),并且不能在没有参数的情况下调用该函数

如果根据传递的参数(或缺少参数)需要不同的行为,那么有两种解决方案:函数重载或默认参数

例如,您可以有两个不同的函数,它们的名称相同,但签名不同(基本上参数不同),因此您可以有

void PlayGame() { ... }
void PlayGame(int passed) { ... }
然后(使用右前向声明),您可以使用无参数调用它,在这种情况下将调用第一个函数,或者使用整数值调用它,在这种情况下将调用第二个函数

使用默认参数可以执行以下操作

void PlayGame(int passed = 0) { ... }
然后,如果您使用参数调用函数,则该参数将被传递,如果您不使用任何参数传递该函数,则将使用默认值(
0
,在我的示例中)

还要注意的是,我删除了常量引用部分,对于简单的
int
值,它实际上并不需要


所有这些都应该在中清楚地解释。

谢谢,但是现在我应该在我的主函数中写什么呢?还有一个游戏,我不需要它来回报什么。在这里写的还是一样的?我在C++ shell中尝试过这个方法,它失败了很多错误,包括:“1:43:错误:预期的不合格ID”,谢谢编辑。现在我有更多的东西要看!我自己看看,即使是C++ C++也能让上面的代码从你现在的扩展建议中工作。并且它失败了许多错误,包括:“1:43:错误:预期不合格ID之前,我尝试了这个在C++外壳()),它失败了一些错误,包括:“1:43:错误:在'@PeterDavidCarter'之前应为非限定id好吧,现在对该函数的所有调用都必须带有参数ah,好的。”。C++不是我的优点。我读了很多关于C++的文章,在它出来后,在大学里做了很多Pascal,最近用java做了一些游戏,但我从很久以前就没有看C++,所以我很可能忽略了你在答案中忽略的一些明显的东西,认为每个人都会知道,在猜测:~ PeterDavidCarter绝对没错!人们总是假设他们显而易见的东西对于其他人来说也是显而易见的,我以前很少看C++,但是我遇到了一个写得比光快的人,他告诉我他写的全部都是C++,所以我想学它。
void PlayGame(int passed = 0) { ... }