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 :

[E2451] Undefined symbol 'att_nombre'


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut [E2451] Undefined symbol 'att_nombre'
    Unit2.H :

    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
    //---------------------------------------------------------------------------
     
    #ifndef Unit2H
    #define Unit2H
    class Nombre
    {
    public:
            //ATT
            int nb;
     
            //CONS
            Nombre(int chiffre);
     
            //accesseurs
            int GetNombre();
     
            //méthodes
            int Test();
    };
     
    #endif

    Unit2.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
    17
    18
     
    #include "Unit2.h"
    Nombre::Nombre(int in_chiffre)
    {
            int att_nombre = in_chiffre;
    }
     
     
    int Nombre::GetNombre()
    {
            return att_nombre;
    }
     
     
    int Nombre::Test()
    {
               return 1;
    }

    [C++ Warning] Unit2.cpp(6): W8004 'att_nombre' is assigned a value that is never used
    [C++ Error] Unit2.cpp(11): E2451 Undefined symbol 'att_nombre'

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Tu ne lis pas l'anglais / ton EDI n'est pas capable de t'ammener à la ligne de l'erreur ?
    Hint: revois les différences entre les variables locales et les variables membres ?
    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...

  3. #3
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut int Nombre::GetNombre()
    Salut !

    Et bienvenu dans le forum

    La variable att_nombre n'est defénie que dans le constructeur de ta classe,en d'autres terme : elle est définie localement,et ne peut être utilisée que dans celui-ci(constructeur) !

    C'est pour ça que lorsque tu l'a utilisé dans la méthode int GetNombre(), le compilateur ne l'a pas reconnu !

    Je croi que t'as voulu faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    int Nombre::GetNombre()
    {
            return nb;
    }
    Je concidère ça comme une erreur de frappe



    Bonne chance !



  4. #4
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    Rholala la honte
    ca fait deux jours que je cherchais, à chaque fois vers 3H du mat .

    J'espère que vous me pardonnerez ce petit écart

    par contre maintenant j'ai ceci :
    W8004 'att_nombre' is assigned a value that is never used

    Est ce normal ? Car l'attribut att_nombre est utilisé par la méthode accesseur de la classe Nombre pourtant non ?

    Alors je ne comprends pas pourquoi il me dit que ca n'est jamais utilisé.

  5. #5
    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
    Par défaut
    Oui, c'est normal. Quand tu écris int att_nombre = in_chiffre; tu définis une variable locale (qui cache temporairement ta variable membre). Tu lui assigne une valeur, et dès la fin du constructeur, cette variablee st détruite. Ta variable membre, elle n'a jamais été initialisée.
    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.

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    donc comment éviter ce warning ?
    variable membre, c'est une variable définie dans le fichier d'entete ? (à la différence d'un définition d'une variable locale)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Une variable membre, c'est une variable définie dans la classe.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Re !


    Unit2.H :

    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
    //---------------------------------------------------------------------------
     
    #ifndef Unit2H
    #define Unit2H
    class Nombre
    {
    public:
            //ATT
            int att_nombre;
     
            //CONS
            Nombre(int chiffre);
     
            //accesseurs
            int GetNombre();
     
            //méthodes
            int Test();
    };
     
    #endif

    Unit2.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
    17
    18
    #include "Unit2.h"
    Nombre::Nombre(int in_chiffre)
    {
           /*int*/ att_nombre = in_chiffre;
    }
     
     
    int Nombre::GetNombre()
    {
            return att_nombre;
    }
     
     
    int Nombre::Test()
    {
               return 1;
    }

    Bonne continuation !

  9. #9
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    merci interruption13H mais je ne comprends pas pourquoi le fait de commenter le int résout mon problème !

  10. #10
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    le fait de le mettre en commentaire, fait qu'il ne sera pas interprêté par le compilo et donc ta variable ne sera pas déclaré localement et utilisera celle déclaré au préalable. Le commentaire est juste là pour te montrer la différence entre ton premier code et celui-ci.

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

Discussions similaires

  1. Utilisation de plugin -undefined symbol- Explication
    Par dafalcon dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 31/08/2007, 15h44
  2. undefined symbol "enum"
    Par djallal dans le forum C
    Réponses: 2
    Dernier message: 02/03/2007, 22h29
  3. virtual et héritage, ld undefined symbol
    Par grodwar dans le forum C++
    Réponses: 2
    Dernier message: 03/01/2007, 09h00
  4. probleme a la compilation:Undefined symbols
    Par djobanaille dans le forum C++
    Réponses: 3
    Dernier message: 07/12/2005, 15h33
  5. Undefined symbol
    Par tchoimars dans le forum C
    Réponses: 2
    Dernier message: 02/12/2005, 17h28

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