0

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 */
}

で調べるgameGamesMenu::refreshGamesListの中身はgame問題ないようです。中古で検品gameするGamesMenu::displayGamesListと、中身は全てゴミです。ベクトルの要素が間違ったデータか何かを指しているかのようです。

この混乱から抜け出すのを手伝ってくれる人はいますか?ありがとう!:)

4

0 に答える 0