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

MFC Discussion :

fatal error LNK1120: 1 externes non résolus


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut fatal error LNK1120: 1 externes non résolus
    Bonjour, je me retrouve confronter à cette erreur:

    error LNK2001: symbole externe non résolu "int configRaid" (?configRaid@@3HA)
    fatal error LNK1120: 1 externes non résolus

    J'utilise une variable globlale qui recoit une valeur entiere après avoir clické sur un bouton. Mon code est correct mais la variable globale ci-dessus commence à me soualé. Voici la déclaration et l'utilisation de cette variable si ça peut aider.

    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
    29
    30
    31
    32
    33
    34
    35
    36
     
    extern int configRaid; 
     
    void CStartConfigBagues::OnBnClickedRaid1()
    {
    	configRaid = 0;
    }
     
    void CStartConfigBagues::OnBnClickedRaid11()
    {
    	configRaid = 1;
    }
     
    void CStartConfigBagues::OnBnClickedRaid12()
    {
    	configRaid = 2;	
    }
     
     
    switch(configRaid)
       {
    		case 0:
    			GetDlgItem(IDC_RAID2)->ShowWindow(false);
    			GetDlgItem(IDC_RAID1)->ShowWindow(false);
    			break;
     
    		case 1:
    			GetDlgItem(IDC_RAID2)->ShowWindow(false);
    			GetDlgItem(IDC_RAID1)->ShowWindow(true);
    			break;
     
    		 case 2:
    			GetDlgItem(IDC_RAID2)->ShowWindow(true);
    			GetDlgItem(IDC_RAID1)->ShowWindow(true);
    			break;
       }
    Voila la principale partie de mon code concernant cette variable.
    Si quelqu'un peut m'expliquer ce que j'ai oublié je le remercie. A++

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Si elle n'est pas déclarée autre part, enlever le extern

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    J'ai fait ce que tu m'a dit mais je me sers de cette variable dans deux fichiers différents et maintenant j'ai l'erreur suivante :

    error C2065: 'configRaid'*: identificateur non déclaré
    error C2050: expression de switch non intégrale

    suis-je un boulet je commence vraiment a me dire que oui.

  4. #4
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    tu as bien enlevé seulement le mot-clé extern devant ?

    rassures-moi, le switch se trouve bien à l'intérieur d'une fonction ?

    @+

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Oui bien sur, boulet mais pas completement incompétent lol.
    Lors de la generation il m'affiche cette erreur.

    error LNK2005: "int configRaid" (?configRaid@@3HA) déjà défini(e) dans AboutDlg.obj

    Faut-il que je supprime le fichier " AboutDlg.obj " et que je le regenere ou mon erreur est tout autre.
    J'ai corrigé l'erreur precedente vive la boulet attitude j'ose pas vous dire.

  6. #6
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    c'est que tu utilises déjà cette variable dans le fichier "AboutDlg.cpp"

    donc c'est bien extern qu'il faut devant si tu veux référencer la variable déclarée dans "AboutDlg.cpp"

    si c'est une autre variable indépendante, rajoute le mot-clé static devant.

    @+

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Le fichier AboutDlg n'utilise pas cette variale. Dans un fichier pearl.h j'ai déclaré toutes les variables globales, je n'ai fait que rajouté cette variable. L'utilisation de cette variable ne se fait que dans deux fichier .cpp qui sont start.cpp et MainFrm.cpp. De plus ces deux fichiers ont en include pearl.h donc la je seche un peu sur mon erreur.
    Avec le static il me met cette erreur là :

    error C2159: plus d'une classe de stockage spécifiée

    Donc j'ai supprimé le static mais je reviens a l'erreur precedente.
    Je vais finir par devenir dingue. lol

  8. #8
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Dans un fichier pearl.h j'ai déclaré toutes les variables globales
    on ne déclare pas une variable dans un fichier .h !!
    on déclare le prototype uniquement
    toutes les variables doivent etre déclarées dans un fichier .cpp
    sinon tu t'exposes a des gros soucis, parce que les .h tu les inclues a tour de bras, donc tu déclares autant de fois la variable

    un exemple

    dans le fichier .h :

    dans un seul fichier .cpp:

    comme ceci, la variable TOTO devient accessible à partir du moment ou tu inclues le .h correspondant.

    @+

  9. #9
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Ok donc si j'ai bien compris il faut que je declare aussi cette varaible dans mes fichiers .cpp. Dans ce cas faut-il que je les place en variable globale ou locale?
    J'avoue que c'est la premiere fois que je gere ce genre d'application.
    Merci

  10. #10
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Ok donc si j'ai bien compris il faut que je declare aussi cette varaible dans mes fichiers .cpp. Dans ce cas faut-il que je les place en variable globale ou locale?
    quand il y a le mot extern devant une déclaration, ce n'est plus une déclaration mais une référence externe. C'est à dire que le compilateur n'alloue pas un emplacement pour cette variable, il sait juste qu'il y a une variable exterieure au cpp qu'il est en train de compiler.

    a un moment, il faut bien la déclarer qque part cette variable pour réserver l'emplacement mémoire, mais dans un fichier .cpp et sans le mot-clé extern devant.

    donc dans les .h on indique les références externes qu'on a besoin ou qu'on veut exposer aux autres fichiers cpp

    dans un seul cpp on déclare la variable.

    si tu fais la déclaration dans un fichier .h, alors a chaque fois que tu inclues le fichier tu redéclares la variable ; et ça le linker il n'aime pas, et il te mettra variable déjà définie


    @+

  11. #11
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Je te remercie pour tes explications qui m'ont bien aider. Je n'ai plus d'erreur, ça fait plaisir avant de partir en week-end lol.
    A++

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

Discussions similaires

  1. error LNK2019: symbole externe non résolu
    Par bugmenot dans le forum Visual C++
    Réponses: 6
    Dernier message: 24/11/2009, 01h02
  2. error LNK2001:sumbole externe non résolu
    Par mony84 dans le forum Bibliothèque standard
    Réponses: 7
    Dernier message: 27/08/2008, 17h17
  3. Réponses: 4
    Dernier message: 16/07/2007, 09h03
  4. symboles externe non résolus
    Par hpavavar dans le forum Visual C++
    Réponses: 13
    Dernier message: 16/05/2007, 15h24
  5. visual c++: error LNK2019 et fatal error LNK1120
    Par moimoi_1 dans le forum MFC
    Réponses: 2
    Dernier message: 05/11/2005, 07h41

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