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) { ... }