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

Langage C++ Discussion :

Appel d'un constructeur à partir d'un autre constructeur


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut Appel d'un constructeur à partir d'un autre constructeur
    Bonjour,

    J'ai encore un souci pour faire des constructeurs multiple, où un constructeur avec moins de paramètre appel un autre avec plus de paramètres ...

    Voici ce que donne mon code (vous voyez l'erreur ?!) :

    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
     
    DigitalPin::DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW) :
    _device(device), _pin(pin), _mode(mode), _level(defaultlevel)
    {
     
      PinMode changedMode = _device.digitalPinMode(_pin, _mode);
      if (changedMode != MODE_ERROR) {
     
        write(_level);
      } 
      else {
     
        _mode = MODE_UNDEFINED;
        _level = LEVEL_UNDEFINED;
      }
    }
     
    DigitalPin::DigitalPin(Device & device, PinNumber pin, PinMode mode) : DigitalPin(device, pin, mode, LEVEL_LOW)
    {
      //DigitalPin(device, pin, mode, LEVEL_LOW);
    }
     
    DigitalPin::DigitalPin(Device & device, PinNumber pin) : DigitalPin(device, pin, MODE_OUTPUT)
    {
      //DigitalPin(device, pin, MODE_OUTPUT);
    }
    et comme erreur j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DigitalPin.cpp: In constructor 'DigitalPin::DigitalPin(Device&, PinNumber, PinMode)':
    DigitalPin.cpp:20: error: type 'DigitalPin' is not a direct base of 'DigitalPin'
    DigitalPin.cpp:20: error: uninitialized reference member 'DigitalPin::_device'
    DigitalPin.cpp: In constructor 'DigitalPin::DigitalPin(Device&, PinNumber)':
    DigitalPin.cpp:25: error: type 'DigitalPin' is not a direct base of 'DigitalPin'
    DigitalPin.cpp:25: error: uninitialized reference member 'DigitalPin::_device'

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Il me semble qu'en C++11 et supérieur, c'est possible; mais pas en C++03 ou inférieur.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Arf

    Du coup il y quoi comme alternative "propre" pour faire ça sans dupliquer du code ?
    Genre une méthode init(...) avec paramètres par défaut ? (d'ailleurs ça fonctionne les paramètres pas défaut avec du C++03)

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Tu peux mettre des paramètres par défaut au constructeur aussi.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    J'viens de tester, alors j'ai mis comme ça :

    dans le .h (si je met pas aussi les valeur par défaut dans le .h j'ai encore plus d'erreur que ci dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW);
    dans le .cpp
    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
     
    DigitalPin::DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW) :
    _device(device), _pin(pin), _mode(mode), _level(defaultlevel)
    {
     
      PinMode changedMode = _device.digitalPinMode(_pin, _mode);
      if (changedMode != MODE_ERROR) {
     
        write(_level);
      } 
      else {
     
        _mode = MODE_UNDEFINED;
        _level = LEVEL_UNDEFINED;
      }
    }
    ... mais j'ai toujours des erreurs :/
    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
     
    Arduino : 1.5.7 (Mac OS X), Carte : "Arduino Uno"
     
    DigitalPin.cpp:4:117: error: default argument given for parameter 3 of 'DigitalPin::DigitalPin(Device&, PinNumber, PinMode, PinLevel)' [-fpermissive]
     DigitalPin::DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW) :
                                                                                                                         ^
    In file included from DigitalPin.cpp:2:0:
    DigitalPin.h:15:5: error: after previous specification in 'DigitalPin::DigitalPin(Device&, PinNumber, PinMode, PinLevel)' [-fpermissive]
         DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW);
         ^
    DigitalPin.cpp:4:117: error: default argument given for parameter 4 of 'DigitalPin::DigitalPin(Device&, PinNumber, PinMode, PinLevel)' [-fpermissive]
     DigitalPin::DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW) :
                                                                                                                         ^
    In file included from DigitalPin.cpp:2:0:
    DigitalPin.h:15:5: error: after previous specification in 'DigitalPin::DigitalPin(Device&, PinNumber, PinMode, PinLevel)' [-fpermissive]
         DigitalPin(Device & device, PinNumber pin, PinMode mode = MODE_OUTPUT, PinLevel defaultlevel = LEVEL_LOW);
         ^

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Met la valeur par défaut de l'argument dans le .h, et pas dans le .cpp, et ça devrait aller mieux.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Met la valeur par défaut de l'argument dans le .h, et pas dans le .cpp, et ça devrait aller mieux.
    Oh si c'est beau !!! ça marche !
    Merci, j'étais en train de chercher en changeant un peu tout mais pas cette solution (c'était trop simple pour que je trouve)

    ... le C++ ne veux décidément pas de moi !

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

Discussions similaires

  1. Appel d'un projet à partir d'un autre
    Par kazhar dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/02/2007, 10h16
  2. Appel d'un constructeur à partir d'un autre
    Par Pragmateek dans le forum Langage
    Réponses: 28
    Dernier message: 18/06/2006, 01h07
  3. comment appeler une requete a partir d'une autre ?
    Par DjBeGi dans le forum Access
    Réponses: 2
    Dernier message: 01/06/2006, 14h39
  4. Pb d'appel d'objet a partir d'un autre objet
    Par sebastien2222 dans le forum Langage
    Réponses: 11
    Dernier message: 31/05/2006, 09h49

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