我有一个变量,可以保存游戏的分数。
我的变量在if语句之外是可访问和正确的,但不在内部,如下所示
得分在main.cpp的顶部声明,并在显示功能中计算,该功能还包含以下代码
cout << score << endl; //works
if(!justFinished){
cout << score << endl; // doesn't work prints a large negative number
endTime = time(NULL);
ifstream highscoreFile;
highscoreFile.open("highscores.txt");
if(highscoreFile.good()){
highscoreFile.close();
}else{
std::ofstream outfile ("highscores.txt");
cout << score << endl;
outfile << score << std::endl;
outfile.close();
}
justFinished = true;
}
cout << score << endl;//works
编辑: 已经实现了我的问题,当我打印出它多次循环所以我没有看到他们所有的第一个循环都不起作用,因此我认为其他人正在工作,实际上他们不是第一次迭代。
答案 0 :(得分:1)
这不是与变量范围有关的问题。
可能有几件事:
您确定要查看分数值前后分别但不在内部的同一迭代吗?也许放一些更详细的日志记录而不是简单地输出分数本身。
答案 1 :(得分:1)
尝试打印当前打印得分的每个地方cout << score << "@" << &score << endl;
。这将让你检查你是否真的在看同一个变量。
如果地址不同,你会不小心在某个地方隐藏你的得分变量 - gcc有-Wshadow
来捕捉它。
如果地址相同,那么变量就会以某种方式被破坏。大多数调试器都有内存断点功能,因此您可以设置调试器在分数内存发生变化时发生故障并找到罪魁祸首。
答案 2 :(得分:0)
根据您附加的代码量,没有任何迹象表明代码中存在问题。正如Brian所说,这是其他的东西
你可以在调试器中试试看看会发生什么吗?我们的想法是尽可能地简化问题,并尝试获得复制问题的最少量代码。
这是做什么的?
cout << score << endl; //works
if(!justFinished)
{
cout << score << endl; // doesn't work prints a large negative number
}
cout << score << endl; //works