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 ?

  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.

  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

  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 !

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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...

  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.

+ 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