у меня есть GameLobby
класс, который хранит список текущих активных игр. Я хочу получить активные игры с GameLobby
(singleton) и отображать их пользователю.
(Отказ от ответственности: я довольно плохо знаком с C ++, поэтому следующий код не совсем звездный. И при этом это не полный код, но я уверен, что все соответствующие инструкции были включены.)
Сначала некоторые определения
class GamesMenu : public MyGameLayer
{
private:
std::vector<Game*>* _activeGames;
void displayGamesList();
void refreshGamesList();
};
а также
class MyGameLayer : public cocos2d::CCLayer
{
private:
GameLobby* _gameLobby;
public:
GameLobby* getGameLobby();
};
а также
GameLobby* MyGameLayer::getGameLobby()
{
return _gameLobby;
}
Теперь к проблеме под рукой. Я хочу выполнить GamesMenu::refreshGamesList()
который выглядит так:
void GamesMenu::refreshGamesList()
{
GameLobby* gameLobby = getGameLobby();
if (gameLobby) {
_activeGames = gameLobby->getActiveGames();
Game* game = _activeGames->at(0); // For debug purposes only - this game is NOT garbage
}
displayGamesList();
}
где
std::vector<Game*>* GameLobby::getActiveGames()
{
if (_loggedInPlayer) {
refreshActiveGames(_loggedInPlayer->GetPlayerToken());
} else {
refreshActiveGames("");
}
return &_activeGames;
};
а также std::vector<Game*> _activeGames
является частным членом GameLobby
,
Тем не менее, когда выполнение хитов displayGamesList()
, дела идут довольно плохо
void GamesMenu::displayGamesList()
{
for (unsigned i = 0; i < _activeGames->size(); i++) {
Game* game = _activeGames->at(i); // The contents of game is garbage. Why?
std::string opponentName = game->GetOpponentName(); // This I don't even want to talk about
};
/* Supressed drawing stuff */
}
Когда я проверяю game
в GamesMenu::refreshGamesList
, содержание game
кажется в порядке. Когда я проверяю game
в GamesMenu::displayGamesList
, содержимое всего мусора. Это как если бы элементы вектора указывали на неправильные данные или что-то в этом роде.
Может кто-нибудь помочь мне распутаться из этого беспорядка? Спасибо! 🙂
Задача ещё не решена.
Других решений пока нет …