【问题标题】:Variable not accessible within an if statement在 if 语句中无法访问变量
【发布时间】:2010-04-20 14:51:23
【问题描述】:

我有一个保存游戏分数的变量。

我的变量在 if 语句之外是可访问和正确的,但在内部却不是,如下所示

score 在 main.cpp 的顶部声明并在 display 函数中计算,该函数也包含以下代码

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

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

【问题讨论】:

  • 变量score在哪里声明,你给它分配了什么?
  • 什么编译器/操作系统?你能说明分数是在哪里/如何宣布的吗?
  • score是整数类型还是类的实例?

标签: c++ variables scope


【解决方案1】:

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

这可能是几件事:

  • 某处内存损坏
  • 多线程相关问题
  • 别的东西...

您确定您正在查看相同的迭代,其中分数值在之前和之后有效但不在内部?也许放一些更详细的日志记录而不是简单地输出分数本身。

【讨论】:

    【解决方案2】:

    尝试在您当前打印乐谱的每个地方打印cout &lt;&lt; score &lt;&lt; "@" &lt;&lt; &amp;score &lt;&lt; endl;。这将让您检查您是否真的在查看相同的变量。

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

    如果地址相同,则变量会以某种方式损坏。大多数调试器都有内存断点功能,因此您可以设置调试器在分数中的内存发生变化时中断并找出罪魁祸首。

    【讨论】:

      【解决方案3】:

      根据您附加的代码数量,没有任何迹象表明代码存在问题。正如布赖恩所说,这是另一回事

      你能在你的调试器中试试这个,看看会发生什么吗?我们的想法是尽可能简化问题,并尽量减少复制问题的代码量。

      这是做什么的?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        相关资源
        最近更新 更多