Я делаю довольно новый для 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;
Здесь нет универсальный. как это называется в универсальный сам класс.
Это сильно смутило меня, и я не могу понять, что является причиной проблемы. Любая помощь или объяснение было бы здорово, спасибо заранее.
Краткий ответ: вы объявляете 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
}