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 :

Constructeurs et les paramètres passés par référence obligatoires.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut Constructeurs et les paramètres passés par référence obligatoires.
    Bonjour,

    J'ai été formé en java et je débuter en c++ avec le support du livre que j'ai vu sur ce site "QT et c++". Personnellement quand je lis du code c++ j'arrive à le comprendre après avoir lu quelque tutoriaux. Je développe un programme en QT et kdepim mais les api utilisée n'ont pas vraiment d'importance ici car il semble que ce soit plutôt un problème de syntaxe.

    Voila mon problème.

    J'ai fais une classe dérivée de KABC::Adresses (classe qui perment de stocker des Adresse dans le carnet d'adresse de kde pim)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class TypeAdresses : public KABC::Address
    et j'y ai mis deux constructeurs.

    L'un par défaut avec le paramètre un pointeur vers la super clasase.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public:
    explicit TypeAdresses(KABC::Address *parent  = 0);
    et l'autre ou je voudrais que le paramètre de type QString passé par référence soit obligatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeAdresses (KABC::Address *parent = 0, QString &typeAdresse );
    Malheureusement, cela semble ne pas fonctionner comme je l'attendais. le compilateur c++ me fait comprendre que cette référence doit être initialisée elle aussi.

    je mets alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeAdresses (KABC::Address *parent = 0, QString &typeAdresse = 0 );
    Du coup, quand je met cette ligne à un endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        TypeAdresses adresse;;
    Le compilateur confond les deux constructeur ce qui est normal puisque tous les paramètre ont des valeur par défaut Je n'arrive cependant pas a rendre obligatoire le paramètre QString passé par référence.

    Comment faire pour résoudre mon problème ?

    J'ai cherché une solution sur google et dans mon livre mais je n'ai rien trouvé mis à part qu'il sembleras que toute référence doit être initialisée en c++

    Confirmez-vous cela ?

    Ma classe à la propriété suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private:
      QString typeAdresse;
    Je vous remercie d'avance pour votre aide. Si vous pouviez me répondre assez rapidement ça serait sympa.

    Salutations

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    TypeAdresses(QString const & typeAdresse, KABC::Address /*const*/ * const parent = 0); ?

  3. #3
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    Et en stockant l'adresse ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeAdresses (KABC::Address *parent = 0, const QString &typeAdresse ) : typeAdresse(typeAdresse) {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private:
      QString &typeAdresse;

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Bonsoir,
    Et en stockant l'adresse ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeAdresses (KABC::Address *parent = 0, const QString &typeAdresse ) : typeAdresse(typeAdresse) {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private:
      QString &typeAdresse;
    Il faut mettre les paramètres avec une valeur par défaut à la fin (dans la signature de la "fonction").
    QString & n'est pas une adresse mais une référence

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    les paramètres obligatoires doivent être à gauche.
    Ou plutôt, les paramètres optionnels pouvant avoir une valeur par défaut à droite.
    En C++ (tout comme en JAVA d'ailleurs), l'ordre des paramètres importe.

    Btw, un pointeur nul sera mieux représenté par la valeur... NULL, ou nullptr.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Btw, un pointeur nul sera mieux représenté par la valeur... NULL, ou nullptr.
    NULL est à éviter, il faut utiliser nullptr en C++11, 0 sinon.

    ---

    Edit
    Comme on m'a collé deux points négatifs... (sans réponse)
    Extrait de «Bjarne Stroustrup's C++ Style and Technique» FAQ http://www.stroustrup.com/bs_faq2.html#null
    Should I use NULL or 0?
    In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days.

    If you have to name the null pointer, call it nullptr; that's what it's called in C++11. Then, "nullptr" will be a keyword.
    Grosso modo:
    - En C++ on évite les macros
    (- NULL n'était pas forcément égal à 0 avant le standard)
    - En C++11 on utilise le mot clef «nullptr»

    (J'aurais du mettre «à "éviter"» au lieu de «à éviter»)

  7. #7
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut
    Bonjour,

    Mille fois merci pour vos renseignements. Désormais, le compilateur ne ne me donne plus cette erreur.

    Donc si j'ai bien compris un constructeur se présence comme ça.

    NomDeClasse (paramètre obligatoire, paramètre optionnel)

    Comme vous faites allusion au java, malgré le faite que mon expérience dans ce langage soit plus importante qu'en C++, je ne connaissait pas cette particularité.

    Merci encore à tous les participant de cette discutions

    Salutations

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

Discussions similaires

  1. [OpenOffice][Base de données] Les paramètres passés dans la subroutine ne sont pas récupérés par celle-ci
    Par veroby dans le forum OpenOffice & LibreOffice
    Réponses: 6
    Dernier message: 15/03/2009, 20h24
  2. $_POST : supprimer les paramètres passés par l'url
    Par yosraisi dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2008, 12h19
  3. connaitre les paramètres demandés par une méthode
    Par von_magnus dans le forum Tkinter
    Réponses: 4
    Dernier message: 25/07/2006, 14h22
  4. [C#] - Récupérer les paramètres passés à une application
    Par linuxludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 14h41
  5. [POO] Problème de paramètre passé par référence
    Par dug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2005, 20h29

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