Где объявить переменные, используемые в приложении (wxWidgets)? - PullRequest
0 голосов
/ 17 апреля 2019

Я создал MyApp класс, который наследуется от wxApp и добавил к нему некоторые переменные компонента:

class MyApp : public wxApp {
    GameBoard* gb;
    Player* player;
    bool lightTheme;

    std::vector<wxBitmapToggleButton *> cardImages;
public:
    MyApp();
    virtual bool OnInit();
    void displayImages(wxFrame *, wxGridSizer *);

    void OnCardSelect(wxCommandEvent&);
};

, затем я установил их значения в MyApp::OnInit:

void MyApp::OnInit() {
    //...
    player = new Player(1);
    //...
}

и когда я использую Player методы класса в функции MyApp::OnInit, все работает нормально, но когда я использую его в функции события, я получаю странные результаты (например, размер empty std::vector<int> объявлено в Player класс возвращает 18446744073709551540).Функция события:

void MyApp::OnCardSelect(wxCommandEvent& event) {
    std::cout << (player->getChosen()).size() << std::endl;
    // above line only for debugging, getChosen() returns const std::vector<int>&, which should be empty, but it print strange result
    wxBitmapToggleButton *selectedCard = dynamic_cast<wxBitmapToggleButton *>(event.GetEventObject());
    player -> toggleChosen(int(selectedCard -> GetId()));
}

Что происходит с переменными компонента MyApp после вызова OnInit (с использованием IMPLEMENT_APP(MyApp)), и где я должен объявлять и изменять значения этих переменных?

...