GameLobby
現在アクティブなゲームのリストを保持するクラスがあります。GameLobby
(シングルトン) オブジェクトからアクティブなゲームを取得し、それらをユーザーに表示したいと考えています。
(免責事項: 私は 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
と、中身は全てゴミです。ベクトルの要素が間違ったデータか何かを指しているかのようです。
この混乱から抜け出すのを手伝ってくれる人はいますか?ありがとう!:)