我正在使用相当新的C ++,我正在使用它为学校项目制作基于文本的游戏。然而,在游戏的第一部分中,玩家通过输入他们选择的答案旁边显示的数字来回答问题。然而,当我测试变量输入到 std :: cout 时,它们会根据输出的位置返回不同的值。如果我在我用来设置它们的类(简介)中输出它们,它们会返回正确的值,例如1或3等。但是当我在除引言之外的任何文件中输出它们时.cpp ,显示的值为-858993460,表示所有值。当我在 main 函数中调用它们时,我从 Main.cpp 得到相同的结果,如果我从另一个类中的另一个函数调用它们简介
这是用于从用户获取输入的一些代码的示例:
void Introduction::CharacterCreation()
{
Universal universal;
std::fstream creation("Introduction_CharacterCreation.txt");
universal.line = 5;
for (int i = 0; i < universal.line; i++)
{
if (i > 0)
{
std::getline(creation, universal.displayText);
std::cout << universal.displayText << std::endl;
}
if (i == 4)
{
std::cout << std::endl;
std::cin >> universal.gender;
while (universal.gender <= 0 || universal.gender >= 3)
{
std::cout << "Please make a valid choice" << std::endl;
std::cin >> universal.gender;
}
}
}
// Code cut out here
}
性别变量是在通用类中声明的 int ,系统会提示用户为男性输入1或为女性输入2通过从单独的文件中提取的文本。如果输入不是1或2,那么while循环会强制玩家继续重新回答问题,直到他们输入1或2. 行变量也是 int 但是,它用于 for 循环,以确保程序读取正确的行。
要输出性别变量,这是我使用的代码:
std::cout << gender << std::endl;
没有通用。,因为它是在通用类本身中调用的。
这使我大为困惑,我无法理解导致问题的原因。任何帮助或解释都会很棒,提前谢谢。
答案 0 :(得分:1)
简短回答:您在Universal
方法中声明了CharacterCreation()
个对象。当此函数退出时,universal
变量的范围是本地的,因此整个对象都会被销毁。
无论您输出的是什么,都是未初始化的垃圾。它实际上可以是任何数字,具体取决于编译/运行程序的系统。要在输入性别后立即对此进行测试,同时仍在函数内部,请尝试运行
std::cout << universal.gender << std::endl;
这应该输出正常。
有很多方法可以解决这个问题。由于您没有发布您称之为此方法的地方或您Universal
课程,我无法确定。但我可以推测一个这样的解决方案,即在方法之外声明Universal
对象,然后将其作为参数传递:
Universal universal = Universal();
Introduction::CharacterCreation(universal);
std::cout << universal.gender << std::endl;
只需声明您的函数标头以接受Universal
对象:
void Introduction::CharacterCreation(Universal & universal)
{
//code here
}