Переменная не доступна в операторе if - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть переменная, которая содержит оценку за игру.

Моя переменная доступна и правильна вне оператора 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

РЕДАКТИРОВАТЬ: понял мою проблему, когда я печатал его много раз, поэтому я не виделиз них первый цикл не сработал, поэтому я подумал, что остальные работали, хотя на самом деле они не были на первой итерации.

Ответы [ 3 ]

1 голос
/ 20 апреля 2010

Попробуйте напечатать cout << score << "@" << &score << endl; в каждом месте, где вы сейчас печатаете счет. Это позволит вам проверить, действительно ли вы смотрите на одну и ту же переменную.

Если адреса разные, вы случайно где-то скрываете свою переменную счета - gcc имеет -Wshadow, чтобы поймать это.

Если адреса совпадают, переменная каким-то образом повреждена. Большинство отладчиков имеют функцию точки останова памяти, поэтому вы можете настроить отладчик на разрыв, когда память в партитуре изменяется, и найти виновника.

1 голос
/ 20 апреля 2010

Это не проблема, связанная с областью действия переменной.

Это может быть несколько вещей:

  • Повреждение памяти где-то
  • Проблема, связанная с многопоточностью
  • Что-то еще ...

Вы уверены, что смотрите на ту же итерацию, где значение оценки работает до и после, но не внутри? Может быть, поставить более подробное ведение журнала вместо простого вывода самого результата.

0 голосов
/ 20 апреля 2010

С количеством кода, который вы добавили, нет ничего, что указывало бы на проблему в коде. Как говорит Брайан, это что-то еще

Можете ли вы попробовать это в своем отладчике и посмотреть, что произойдет? Идея состоит в том, чтобы максимально упростить проблему и попытаться получить минимальный объем кода, который повторяет проблему.

Что это делает?

cout << score << endl; //works
if(!justFinished)
{
    cout << score << endl; // doesn't work prints a large negative number
}
cout << score << endl; //works
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...