Значение класса доступно из нескольких файлов и функций Переполнение стека

Я прошу прощения заранее, если этот вопрос был задан ранее.

Я применил все свои навыки в Google, и все еще ничего, поэтому, если на этот вопрос уже был дан ответ, просто свяжите ответ, и я по сути закончу этот вопрос.

В любом случае, несмотря на все это, моя проблема в том, что у меня есть класс «Player.hpp» и соответствующий «Player.cpp», в котором я определил систему локации для «player», я могу инициализировать значение отлично (которая является одной из функций класса), но затем, когда игрок переходит к функции «play ()» (которая содержит кости игры и находится в другом файле .cpp), когда я использую функцию, чтобы получить Местоположение, которое я сохранил, там ничего не хранится … любая помощь будет оценена.

Если вы не понимаете, о чем я прошу, пожалуйста, прокомментируйте, и я уточню.

Код ниже:

//Player.hpp
class player
{
public:
std::string getLocation();
void setLocation(std::string local);
void initLocation();

private:
std::string location;
};

//Player.cpp
void player::initLocation()
{
player::location = "B0";
return;
}
std::string player::getLocation()
{
return player::location;
}
void player::setLocation(std::string local)
{
player::location = local;
return;
}

//Main.cpp
//....
player plays;
plays.initLocation();
//....

//Game.cpp
//...
player plays;
std::string local = plays.getLocation(); //When I check there isn't a value that gets stored...
if(local.find(...)...)

Опять же, любая помощь приветствуется, и я прошу прощения, если такой вопрос уже задавался.

Я думаю, мне следовало уточнить, что я также хочу изменить значение, хранящееся как player прогрессирует из комнаты в комнату (так как это игра в стиле zork, которую я делаю)

1

Решение

Предполагая, что каждый экземпляр player может быть в другом месте, вы можете решить эту проблему, инициализируя playerрасположение с местоположением по умолчанию в его конструкторе. Это устраняет необходимость initLocation()и, следовательно, нет необходимости звонить из Main.cpp,

//Player.hpp
class player
{
public:
std::string getLocation();
void setLocation(std::string local);

player () : location("B0") {}

private:
std::string location;
};
1

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

Похоже, что вы пропустили static перед объявлением переменной класса:

class player
{
// ...
static std::string location;
};

… что также требует определения. Конечно, определение становится основным местом, чтобы также инициализировать значение:

// Player.cpp
std:string player::location("B0");

делая ненужной функцию инициализации.

0

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