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 :

liste d'initialisation booléen toujours true


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut liste d'initialisation booléen toujours true
    Hello,

    J'ai un petit problème avec un booléen récalcitrant.
    Voici la classe en question :

    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
    27
    28
    template <typename T>
        class GraphicObject : public System::Linkable<T>
        {
     
        public :
     
            GraphicObject( void );
            GraphicObject( Layer<T> & );
            ~GraphicObject( void );
     
            // -----------
     
            inline bool IsVisible( void ) const {
                return my_visibility;           }
     
            // -----------
     
            void Hide( bool = true );
            void Show( bool = true );
            void SetLayer( Layer<T> &, bool show = true );
     
            // -----------
     
        private :
     
            Layer<T> * my_layer;
            bool my_visibility;
        };
    Et le code des constructeurs dans le fichier "inline".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template <typename T>
        GraphicObject<T>::GraphicObject( void )
            : System::Linkable<T>(), my_layer(0), my_visibility(false)
        { 
     
        }
     
        template <typename T>
        GraphicObject<T>::GraphicObject( Layer<T> &layer )
            : System::Linkable<T>(), my_layer(&layer), my_visibility(true)
        {
            my_layer->push_back( this );
        }
    Quoi qu'il arrive le booléen "my_visibility" est toujours égal à true.

    J'ai même essayé de le définir en dehors de la liste d'initialisation, ça ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <typename T>
        GraphicObject<T>::GraphicObject( void )
            : System::Linkable<T>(), my_layer(0)
        { 
            my_visibility = false; // ça ne change rien
        }
    Est-ce déjà arrivé à quelqu'un ?

    J'utilise le compilateur Visual C++ 2008 (Express Edition).

    Si quelqu'un a une idée, merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void Hide( bool = true );
            void Show( bool = true );
    ?

  3. #3
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_layer->push_back( this );
    Je suis étonné que tu arrive a compiler avec ça, sachant que ta liste contient des objet de type "T" alors que this est de type "GraphicObject *"

    Ensuite si tu ne nous passes pas le code ou tu créé ton objet (dans le main) on peut pas vraiment te dire, je pense que ça vient pas de ton objet mais de la manière de construire ton objet dans le main.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    J'ai marqué le sujet avec le "tag" délestage. J'ai trouvé d'où venait le problème.
    C'est un programme composé de plusieurs projets, et l'un d'eux n'était pas à jour.

    @3DArchi

    Le booléen en paramètre n'est pas utile ? Oui c'est vrai

    @skeud

    C'est vrai, qu'il y aurait eu une erreur de compilation, mais, n'ayant pas fait d'appel à ce constructeur dans le programme, il n'a donc pas été compilé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_layer->push_back( static_cast<T*>(this) );
    La classe Layer, n'est pas un conteneur de la STL, c'est une liste cyclique.
    La méthode push_back, prend un pointeur en paramètre.

    Merci et désolé,

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Stobbyo Voir le message
    Le booléen en paramètre n'est pas utile ? Oui c'est vrai
    Ce qui m'a choqué c'est que dans les deux cas la valeur par défaut soit true, la même. Du coup, je me demande à quoi sert ce paramètre ? En fait, probablement à rien et qu'il est redondant avec la fonction.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    de cette manière, on pouvait écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object.Hide(false); // équivalent à object.Show()
    object.Show(false); // équivalent à object.Hide()
    en gros, ça ne sert pas à grand chose lol
    ça permet juste d'exprimer les choses différemment.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Stobbyo Voir le message
    ça permet juste d'exprimer les choses différemment.
    AMHA, ça créé de la confusion. Garde juste Hide()/Show() sans paramètre. C'est quand même très clair comme nom de fonction.

  8. #8
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    AMHA, ça créé de la confusion. Garde juste Hide()/Show() sans paramètre. C'est quand même très clair comme nom de fonction.
    "Pourquoi faire simple quand on peut faire compliqué?"
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    AMHA, ça créé de la confusion. Garde juste Hide()/Show() sans paramètre. C'est quand même très clair comme nom de fonction.
    Citation Envoyé par skeud Voir le message
    "Pourquoi faire simple quand on peut faire compliqué?"
    J'ai enlevé les booléens en paramètres.
    Merci pour ces conseils

    A plus,

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

Discussions similaires

  1. [debutant] Initialiser des booleens à true dans un tableau
    Par dolu02 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 30/04/2007, 09h57
  2. [syntax] liste d'initialisation et heritage
    Par ZaaN dans le forum C++
    Réponses: 1
    Dernier message: 12/12/2006, 16h01
  3. Une liste déroulante est-elle toujours en 1er plan ?
    Par Marc365 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/05/2006, 20h16
  4. Réponses: 1
    Dernier message: 03/11/2005, 14h21
  5. Réponses: 2
    Dernier message: 16/04/2005, 20h24

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