2010-04-20 76 views
0

我有一个变量,它包含游戏的分数。在if语句中无法访问变量

我的变量是如下图所示

得分在main.cpp中的顶部声明,并在显示功能也包含以下

代码计算的if语句而不是内部访问和正确的外
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 

编辑: 已经意识到我的问题,当我打印出它循环了很多次,所以我没有看到他们的第一个循环都没有工作,因此我认为其他人在工作时事实上他们不是第一次迭代。

+2

变量'score'声明在哪里,你分配了什么? – Syntactic 2010-04-20 14:54:09

+0

什么编译器/操作系统?你能否显示声明的分数/分数? – Zanson 2010-04-20 15:00:33

+0

得分是整数类型还是类的实例? – 2010-04-20 15:16:50

回答

1

这不是关于变量范围的问题。

这可能是几件事情:

  • 内存损坏的地方
  • 多线程有关问题
  • 别的东西...

你确定你是在看同一个迭代得分值在前后都有效,但不在里面?也许把更详细的日志记录,而不是简单地输出分数本身。

0

随着代码量的增加,代码中没有任何问题。正如Brian所说,这是别的东西

你可以在你的调试器中试试这个,看看会发生什么?这个想法是尽可能简化问题,并尝试获得最少量的代码来复制问题。

这是干什么的?

cout << score << endl; //works 
if(!justFinished) 
{ 
    cout << score << endl; // doesn't work prints a large negative number 
} 
cout << score << endl; //works 
1

尝试打印cout << score << "@" << &score << endl;每个地方您当前打印的得分。这会让你检查你是否真的在看同一个变量。

如果地址不同,你会不小心在某个地方隐藏你的分数变量--gcc有-Wshadow来捕捉它。

如果地址相同,那么变量会以某种方式被破坏。大多数调试器都具有内存断点功能,所以当内存中的内存发生变化并找到罪魁祸首时,您可以将调试器设置为中断。