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 :

problème d'initialisation dans un constructeur


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Points : 41
    Points
    41
    Par défaut problème d'initialisation dans un constructeur
    ReBojour

    J'ai un problème avec un warning que je ne comprend pas:
    Voici le warning :
    feature.h: In constructor ‘recotex::Feature::Feature(real, real)’:
    feature.h:114: attention : ‘recotex::Feature::m_weight’ will be initialized after
    feature.h:110: attention : ‘int recotex::Feature::ind_orientation’
    feature.h:124: attention : when initialized here


    sachant que ma classe feature à les attribut suivant:
    protected:
    real m_orientation;
    real m_scale;
    int ind_orientation;
    int ind_scale;
    int type;
    real m_weight;

    et que le constructeur en question est :
    inline Feature::Feature( real o, real s, real w )
    : m_orientation( o ), m_scale( s ), m_weight( w ), ind_orientation(0),ind_scale(0)
    {}

    Je ne comprend vraiment pas le Warning.
    Pouvez vous m'aider

    D'avance merci

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    L'initialisation des membres se fait dans l'ordre dans lequel ils apparaissent dans la classe, pas dans l'ordre dans lequel ils sont cites dans la liste d'initialisation.

    Le warning t'averti que les deux ordres sont differents.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Points : 41
    Points
    41
    Par défaut
    Merci depuis le temps que j'éssayait de comprendre ce warning ça fais plaisir

    Sinon j'ai egalement un warning type:
    /usr/lib/qt-3.3/include/qfiledialog.h:78: attention : ‘class QFilePreview’ has virtual functions but non-virtual destructor


    qui apparement vient de QT.
    Que puis-je y faire??

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Rien, tu ne vas pas modifier le code de QT pour ca.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Tu peux regarder la doc de ton compilo et ne pas activer le warning correspondant.
    (Warning assez pénible quand on a des classes à fonctions membre virtuelles, mais dont le destructeur est protégé non virtuel..
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  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 : 49
    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
    Citation Envoyé par Luc Hermitte
    (Warning assez pénible quand on a des classes à fonctions membre virtuelles, mais dont le destructeur est protégé non virtuel..
    Hum, tu pourrais me donner un exemple pertinent de ce schéma ?

    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Oui. C'est pour quand le LSP n'est pas la raison première de l'héritage, et que je veux tout de même spécialiser des comportements (des sortes de hooks).
    Il m'arrive de faire ça pour des objets uniques (singletons par construction et sans l'artillerie instance()) vivant sur la pile.
    Ce n'est pas une construction fréquente, mais parfois pertinente.

    On rejoint l'item 50 du C++ coding standard : Make base class destructors public and virtual, or protected and non virtual. En traduisant un extrait à la volée on a:
    Citation Envoyé par Herb Sutter et Andrei Alexandrescu
    Exemple 2 : Classes de bases sans suppression (deletion) polymorphique. Si la suppression polymoprhique ne doit (shouldn't) pas être permise, le destructeur doit (must) être non-public (pour que le code utilisateur ne puisse pas l'appeler), et devrait (should) être non virtuelle (parce que cela n'est plus nécessaire).
    [...]
    Les classes Police (Policy classes) sont fréquemment utilisées comme classes de base par commodité, pas pour leur comportement polymorphique. Il est recommandé de définir leur destructeur protégé et non virtuel
    .
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Liste d'initialisation dans les constructeurs
    Par Dani3L dans le forum C++
    Réponses: 4
    Dernier message: 25/12/2008, 18h36
  2. problème dans le constructeur
    Par hamoudasafira dans le forum C++
    Réponses: 5
    Dernier message: 11/04/2007, 18h20
  3. Problème d'initialisation d'un booléen dans un UserControl
    Par -Jolan- dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/02/2007, 21h58
  4. [MySQL] Problème d'initialisation de la valeur dans une table
    Par priazu dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/02/2006, 02h00
  5. Réponses: 35
    Dernier message: 14/02/2006, 18h57

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