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

Visual C++ Discussion :

Double r�f�rence � cause des fichiers dans le solution explorer


Sujet :

Visual C++

  1. #1
    Membre actif Avatar de myflash
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juillet 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par d�faut Double r�f�rence � cause des fichiers dans le solution explorer
    j'ai cette erreur quand je compile avec Visual Studio 2005...

    Error 1 error LNK2005: "public: __thiscall abc::abc(void)" (??0abc@@QAE@XZ) already defined in Main.obj abc.obj

    je sais le probl�me mais je sais pas comment r�gler �a ...

    le probl�me est que Visual Studio compile les fichier qui sont dans le solution explorer avant de commencer a compiler mon main ... donc tous les include que je mets dans le ficher main.cpp ca me dit double d�finition, � cause qu'il se trouve � compiler 2 fois les fichiers m�me si j'ai des #pragma once au d�but de chaque fichier...

    je veux garder les fichier dans la liste du solution explorer pour pouvoir cliquer dessus pour les ouvrir et je veux pouvoir mettre mes include aussi pour garder les r�f�rences des d�pendances des class localement dans les fichier .cpp et .h....

    bref ma solution serait de pouvoir dire � Visual Studio de jamais compiler les fichiers dans le solution explorer...

    Quelqu'un sait comment ????

    Merci a l'avance !


    ps: j'ai mis un screenshot en attach...
    Images attach�es Images attach�es  

  2. #2
    Membre actif Avatar de myflash
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juillet 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par d�faut
    on dirrait vraiment que le solution explorer prend pas compte du pragma once ... j'ai essayer aussi avec un define et ca ne marche pas plus... il dit deja definie dans main.

  3. #3
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Bonjour,

    On ne doit faire l'include que de fichiers .H. Et ces fichiers ne doivent pas contenir de d�finitions de variables ni de fonctions. Le #pragma once permet alors de ne pas avoir des types d�finis plusieurs fois.

    En aucun cas, on ne doit faire l'include d'un fichier .C
    En aucun cas on ne doit faire l'include de fichiers qui contiennent des d�finitions de variables ou de fonction.
    En aucun cas, #pagma once n'emp�chera une red�finition d'une variable ou d'une fonction.

  4. #4
    Membre actif Avatar de myflash
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juillet 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Par d�faut
    mais c'est anti convention de scope ca !!! si je fait une class je declare ma class dans le .h et programme les fonction dans le cpp...

    donc pour que le reste du programme vois tout on est suposer inclure le .h et le .cpp ou limite include le cpp et le cpp lui inclut le .h,

    comment le programme est suposer voir le code de la fonction si le cpp est pas inclut nullpart ?!?!?!

    y dois avoir un option pour ca dans visual studio... sinon il faut avoir un option pour ca... je sais pas genre "Precompile solution included cpp file"....

    a ce que je sache, visual studio est le seul compilateur qui fait ca.

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Si tu as plusieurs fichiers qui contiennent du code, ce sont des unit�s de compilation distinctes.
    Il faut mettre les fichiers dans ton projet pour qu'ils soient tous compil�s et li�s. Sous Visual Studio, tu cliques sur ton projet avec le bouton droit et choisis "add existing items..."
    Nom : visual_example.png
Affichages : 446
Taille : 32,5 Ko
    La liste des fichiers doit correspondre � tous le fichiers CPP tu veux compiler.
    Pour que les fichiers CPP puissent se comprendre, il faut mettre dans un fichier .H les d�clarations. Et c'est de ce fichier .H que tes 2 fichiers CPP doivent faire l'include.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Citation Envoy� par myflash Voir le message
    donc pour que le reste du programme vois tout on est suposer inclure le .h et le .cpp ou limite include le cpp et le cpp lui inclut le .h,
    FAUX. Tu es cens� inclure le .h pour lui dire que la fonction existe. Trouver son contenu, le compilateur s'en moque, c'est le boulot de l'�diteur de liens.

    comment le programme est suposer voir le code de la fonction si le cpp est pas inclut nullpart ?!?!?!
    Les deux .cpp sont dans le m�me projet, donc les fruits de leurs compilations seront tous les deux pass�s en ligne de commande de l'�diteur de liens.

    Pour les histoires de "precompiled", le mieux est de d�sactiver tout �a quand on d�bute. �a cause plus de confusion qu'autre chose.


    En fait, j'ai l'impression qu'il te manque la connaissance des principes de base du processus par lequel un ou plusieurs fichiers source C ou C++ donnent un ex�cutable.
    L'information qui te manque, c'est que pour ces langages c'est fait en deux �tapes:
    1. La compilation concerne un fichier source � la fois. Elle transforme le code source C ou C++ en un fichier appel� "code objet", constitu� de petits bouts de code ex�cutable (un morceau par fonction, par exemple). Ces fichiers ne peuvent �tre utilis�s directement parce qu'ils n'ont pas la structure d'un ex�cutable et font r�f�rences aux fonctions de la biblioth�que standard sans les contenir).
      • Sous Visual Studio, les fichiers objets ont l'extension .obj. Sous GCC, ils ont l'extension .o.
    2. L'�dition de liens rassemble les diff�rents fichiers objets, ainsi que les morceaux des biblioth�ques dont ils d�pendent, pour en faire un ex�cutable.
      • C'est un poil plus compliqu� pour les biblioth�ques parce qu'il y en a deux sortes, mais c'est le principe de base.


    Donc en gros, tu as:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    main.cpp  abc.cpp
        |        |
    main.obj  abc.obj   libc.lib
        \       /          /
         dddd.exe
    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.

Discussions similaires

  1. Double JFrame et enregistrer des String dans un fichier .txt
    Par Onelove dans le forum Agents de placement/Fen�tres
    R�ponses: 2
    Dernier message: 29/08/2014, 11h46
  2. [3D'S MAX] importer des fichiers dans OpenGL
    Par black is beautiful dans le forum OpenGL
    R�ponses: 3
    Dernier message: 30/04/2005, 13h45
  3. R�ponses: 9
    Dernier message: 05/04/2005, 09h39
  4. Chemin d'acc�s des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    R�ponses: 4
    Dernier message: 17/11/2004, 14h37
  5. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et ant�rieur
    R�ponses: 10
    Dernier message: 22/08/2003, 00h35

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