IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

wxGLCanvas et constructeur par défaut


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut wxGLCanvas et constructeur par défaut
    Hello,

    J'ai une classe qui est dérivée de wxGLCanvas et aussi d'une autre classe et j'aimerais utiliser un constructeur par défaut de cette classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestGLCanvas::TestGLCanvas() {}
    , mais à la compilation j'ai le message: "'wxGLCanvas' : no appropriate default constructor available"

    main.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class TestGLCanvas: public wxGLCanvas, public ITouchListener
     
    {
    public:
        TestGLCanvas(wxWindow *parent, wxWindowID id = wxID_ANY,
            const wxPoint& pos = wxDefaultPosition,
            const wxSize& size = wxDefaultSize, long style = 0,
            const wxString& name = wxT("GLCanvas"));
     
    	TestGLCanvas();
    	~TestGLCanvas();
    ...
    Comment est-ce que je pourrais faire?
    Merci!

    Greg

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Ce n'est pas possible d'utiliser un constructeur par defaut, sauf si tu renseignes le "wxWindow* parent" de 'wxGLCanvas' via un pointeur global.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut
    Citation Envoyé par Ti-R Voir le message
    Ce n'est pas possible d'utiliser un constructeur par defaut, sauf si tu renseignes le "wxWindow* parent" de 'wxGLCanvas' via un pointeur global.
    Donc si j'ai bien compris, il faut avoir un pointeur sur le wxFrame, par exemple:

    ensuite dans main.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestGLCanvas(wxWindow *parent);
    main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestGLCanvas::TestGLCanvas(frame){}
    Donc après ceci est-ce que je peux faire :
    ?

    Merci

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Si tu as une seule frame.


    Pour faire simple, déclarer quelque part dans un fichier global

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Global.h
    struct Global
    {
         static MyFrame *gFrame;
    }
     
    // Global.cpp
    MyFrame *Global::gFrame=0;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // MyFrame.cpp
    #include "Global.h"
    ...
    MyFrame()
    {
    Global::gFrame = this;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // TestGLCanvas.h
    class TestGLCanvas: public wxGLCanvas, public ITouchListener
     
    {
    	TestGLCanvas();
    ...
     
    // TestGLCanvas.cpp
    #include "Global.h"
    ...
    TestGLCanvas::TestGLCanvas():wxGLCanvas(Global::gFrame)
    {}

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Pour éviter les problèmes de multi-inclusions, il y a plusieurs solutions dont

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Global.h
    struct Global
    {
         static wxWindow*gFrame;
    }
     
    // Global.cpp
    wxWindow*Global::gFrame=0;
    Qui te suffira dans ce cas là.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par défaut
    Merci Ti-R,

    En faisant comme tu as décrit j'ai 3 erreurs de compil.:

    Ligne 753-755:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TestGLCanvas::TestGLCanvas()::wxGLCanvas(Global::gFrame)
    {
    }
    1>.\main.cpp(753) : error C2143: syntax error : missing ';' before 'wxGLCanvas'
    1>.\main.cpp(753) : error C2761: '{ctor}' : member function redeclaration not allowed
    1>.\main.cpp(754) : error C2470: 'Global::gFrame' : looks like a function definition, but there is no parameter list; skipping apparent body

    Mais maintenant j'ai une doute si c'est possible de faire ce que je veux, apart ces erreurs.

    Greg

  7. #7
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Tu as mal recopié

    C'est : et pas ::

    Donc au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestGLCanvas::TestGLCanvas()::wxGLCanvas(Global::gFrame)...
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestGLCanvas::TestGLCanvas():wxGLCanvas(Global::gFrame)...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment modifier le constructeur par défaut
    Par une_tite_question dans le forum NetBeans
    Réponses: 6
    Dernier message: 18/06/2008, 21h24
  2. notion de constructeur par défaut
    Par new_wave dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/05/2008, 19h33
  3. Réponses: 8
    Dernier message: 27/10/2006, 14h36
  4. Réponses: 11
    Dernier message: 25/08/2006, 16h00
  5. Constructeur par défaut en cas de surcharge
    Par gigi_m dans le forum MFC
    Réponses: 4
    Dernier message: 08/06/2005, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo