Почему мои переменные дают другое значение, когда они печатаются вне класса, в котором я их установил?

Я делаю довольно новый для C ++, и я использую его, чтобы сделать текстовую игру для школьного проекта. Однако во время первого раздела игры игрок отвечает на вопросы, вводя число, показанное рядом с выбранным ответом. Однако, когда я тестировал переменные, вход собирался использовать станд :: соиЬ они возвращают разные значения в зависимости от того, где они выводятся. Если я вывел их в классе, который я использую, чтобы установить их (Вступление) они возвращают правильное значение, такое как 1 или 3 и т. д. Однако, когда я вывожу их в любом файле, кроме Introduction.cpp, отображаемое значение равно -858993460 для всех значений. Я получаю тот же результат от 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
}

Пол переменная является ИНТ объявлено в универсальный класс, и пользователю предлагается ввести 1 для мужчины или 2 для женщины по тексту, извлеченному из отдельного файла. Если ввод не 1 или 2, то цикл while заставляет игрока продолжать отвечать на вопрос, пока он не введет 1 или 2. линия переменная также ИНТ Однако это используется для за циклы, чтобы гарантировать, что правильные строки прочитаны программой.

Для вывода Пол Переменная это код, который я использую:

std::cout << gender << std::endl;

Здесь нет универсальный. как это называется в универсальный сам класс.

Это сильно смутило меня, и я не могу понять, что является причиной проблемы. Любая помощь или объяснение было бы здорово, спасибо заранее.

0

Решение

Краткий ответ: вы объявляете 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
}
1

Другие решения


По вопросам рекламы [email protected]