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

C++ Discussion :

info sur les paramètres de constructeur


Sujet :

C++

  1. #1
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut info sur les paramètres de constructeur
    bonjour,
    si je fais une classe avec comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class PhpWriterMenuBar : public QMenuBar
    {
        public:
            PhpWriterMenuBar(PhpWriterActions *Actions);
            QMenu *menuFichier;
            QMenu *menuEdition;
            QMenu *menuAffichage;
     
        private:
            void buildMenuFichier();
            void buildMenuEdition();
            void buildMenuAffichage();
    };
    et que dans mon constructeur je ne fais rien de spécifique, est ce que je peux accèder aux pointeurs action dans les méthode buildMenuFichier();, buildMenuEdition(); et buildMenuAffichage(); ?

    on est ce que je dois faire un truc spécifique dans le constructeur ?
    ---
    "Rien n'est impossible"
    http://journaldeguillaume.blogspot.com

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Il faudrait que tu gardes l'adresse du pointeur Actions dans un attribut de ta classe.
    Pour commencer, je te suggère ceci :

    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
    class PhpWriterMenuBar : public QMenuBar
    {
        public:
            PhpWriterMenuBar(PhpWriterActions *Actions)
            {
                ptr = Actions;
            };
     
            QMenu *menuFichier;
            QMenu *menuEdition;
            QMenu *menuAffichage;
     
        private:
     
            PhpWriterActions* ptr;
     
            void buildMenuFichier();
            void buildMenuEdition();
            void buildMenuAffichage();
     
    };
    A+,
    Agamitsudo.
    Un ordinateur fait au bas mot 1 million d'opérations à la seconde, mais il n'a que ça à penser, aussi. (brèves de comptoirs, JM.Gourio)


  3. #3
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    d'accord,

    par contre une petite précision ,
    y a t'il une différence entre et (par rapport au positionnement de l'étoile)

    //EDIT ---------------
    j'ai fait ça dans mon entete:
    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
    class PhpWriterMenuBar : public QMenuBar
    {
        public:
            PhpWriterMenuBar(PhpWriterActions *ClassActions)
            {
                Actions = ClassActions;
            };
            QMenu *menuFichier;
            QMenu *menuEdition;
            QMenu *menuAffichage;
     
        private:
            PhpWriterActions* Actions;
            void buildMenuFichier();
            void buildMenuEdition();
            void buildMenuAffichage();
    };
    et ça dans mon .CPP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PhpWriterMenuBar::PhpWriterMenuBar(PhpWriterActions *ClassActions)
    {
        buildMenuFichier();
        buildMenuEdition();
        buildMenuAffichage();
    }
    et j'ai cette erreur :
    g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.4.0/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.4.0/include/QtCore -I/usr/local/Trolltech/Qt-4.4.0/include/QtCore -I/usr/local/Trolltech/Qt-4.4.0/include/QtGui -I/usr/local/Trolltech/Qt-4.4.0/include/QtGui -I/usr/local/Trolltech/Qt-4.4.0/include -I. -I. -I. -o PhpWriterMenuBar.o PhpWriterMenuBar.cpp
    PhpWriterMenuBar.cpp:4: erreur: redefinition of «PhpWriterMenuBar:hpWriterMenuBar(PhpWriterActions*)»
    PhpWriterMenuBar.h:12: erreur: «PhpWriterMenuBar:hpWriterMenuBar(PhpWriterActions*)» previously defined here
    make: *** [PhpWriterMenuBar.o] Erreur 1
    ---
    "Rien n'est impossible"
    http://journaldeguillaume.blogspot.com

  4. #4
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    OK j'ai résolu mon pb, mais est ce que l'on peut me dire pourquoi ça ne marchait pas ?

    pour résoudre j'ai fait ça dans l'entete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class PhpWriterMenuBar : public QMenuBar
    {
        public:
            PhpWriterMenuBar(PhpWriterActions *ClassActions);
            QMenu *menuFichier;
            QMenu *menuEdition;
            QMenu *menuAffichage;
     
        private:
            PhpWriterActions* Actions;
            void buildMenuFichier();
            void buildMenuEdition();
            void buildMenuAffichage();
    };
    et ça dans le fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PhpWriterMenuBar::PhpWriterMenuBar(PhpWriterActions *ClassActions)
    {
        Actions = ClassActions;
        buildMenuFichier();
        buildMenuEdition();
        buildMenuAffichage();
    }
    et là ça marche !
    ---
    "Rien n'est impossible"
    http://journaldeguillaume.blogspot.com

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il n'y a strictement aucune différence induite par la position de l'étoile (du point de vue du compilateur).

    Ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaClass* obj;
    MaClass *obj;
    /* et  */
    MaClass     *       obj;
    auront exactement la même signification pour le compilateur.

    La seule différence sera au niveau de l'oeil humain, car, certains ont plus l'habitue de voir l'étoile accrochée au type et d'autre de la voir accrochée à l'objet pointé...

    Pour ce qui est de l'erreur à laquelle tu étais conf'ronté, le message (si tu avais pris la peine de le traduire) était des plus explicites:

    Il y avait une définition multiple pour la méthode PhpWriterMenuBar:: hpWriterMenuBar(PhpWriterActions*)
    La deuxième définition était trouvée dans le fichier nommé PhpWriterMenuBar.cpp à la ligne 4 et la première avait été rencontrée dans le fichier PhpWriterMenuBa.h à la ligne 12.

    Comme l'une des règles immuables du langage est le "one definition rule" (la règle de la définition unique) le compilateur se plaignait de trouver deux fois la définition en question...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    ok merci de l'info.
    ---
    "Rien n'est impossible"
    http://journaldeguillaume.blogspot.com

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

Discussions similaires

  1. [VB6]Question bête sur les paramètres optionels
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 20h33
  2. [Formation][IUT] Infos sur les iut info, gtr
    Par sand0z dans le forum Etudes
    Réponses: 9
    Dernier message: 14/06/2005, 09h54
  3. Réponses: 3
    Dernier message: 28/10/2004, 08h39

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