Bonjour,

J'avoue que le titre est plutôt mystique, mais je n'ai pas trouvé plus explicite. =/
Je commence actuellement un nouveau projet de jeu, et me penche sur la gestion des différents menus ; j'ai opté, comme expliqué sur le wiki de la SFML, pour une classe mère CMenu qui possède une méthode virtuelle run(). Cette méthode est redéfinie par les classes filles, une pour chaque menu.

Seulement, dans ma classe CGame (classe principale du jeu), j'utilise un attribut vector de CMenu* ; seulement, je n'arrive pas à conserver les objets d'une méthode à l'autre et pire j'ai à priori des fuites mémoires...

Si j'essaie de faire un vector de CMenu, le compilateur m'explique logiquement que cette classe ne peut être instanciée.

Connaitriez-vous une solution contre ce genre de problèmes svp ?

Voici quelques extraits du code actuel :

- la déclaration du vector
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
std::vector<CMenu*> m_menus;
- son initialisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
// Create and push all menus
  m_menus.push_back(new CMenu_0);
 
  // Set app to all menus
  for (vector<CMenu*>::iterator i = m_menus.begin(); i != m_menus.end(); ++i) {
    (*i)->setApp(&m_app);
  }
 
  m_menus[CMenu::WELCOME]->run();
- la classe mère CMenu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
class CMenu {
 
  protected:
    sf::RenderWindow* m_pApp;
    int m_nextId;
 
  public:
    /** Menus names */
    enum MenusNames { INVALID = -1,
                      WELCOME = 0 };
    /**
     *  Default constructor
     *  Set m_pApp to 0, to be sure the pointer will be passed
     */
    CMenu();
 
    /**
     *  Constructor
     *  Permit to init with a pointer to app
     */
    CMenu(sf::RenderWindow* pApp);
 
    /**
     *  Set the pointer to application object
     */
    void setApp(sf::RenderWindow* pApp);
 
    /**
     *  Menu loop
     *  Must be defined in under classes
     *  Manage display, events, etc...
     *  @return Next menu's ID
     */
    virtual int run() = 0;
 
};
Merci d'avance !