Probleme compilation

Résolu
Kelm0 Messages postés 23 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 juin 2008 - 24 mai 2008 à 13:41
Kelm0 Messages postés 23 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 juin 2008 - 24 mai 2008 à 19:06
Bonjour, j'ai dev c++, et j'ai fais 2 classes avec 1 fichier par classe + le main.
Le compilateur me lance un message d'erreur :

 multiple definition of `Classe1::Fonction1(std::string, int)' 
 first defined here

Et ce message est répété pour toutes les methodes de mes 2 classes

Problème : j'ai pas du tout défini 2 fois ces méthodes ...

8 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 mai 2008 à 16:33
La génération se passe en deux étapes :

D'abord la compilation (produit des fichiers obj). Pour cette étape, le compilateur à besoin de trouver les déclarations des méthodes appelées. A ce stade, ca fonctionne même si tu n'a pas écrit le corps de tes méthodes dans un .cpp.
Ensuite l'édition de lien ca raccorder tous les fichiers obj obtenus lors de la compilation des fichiers cpp. C'est à ce moment qu'est fait le lien entre la déclaration et la définition de méthodes. Donc pour répondre à ta question : c'est en fait l'éditeur de lien qui va s'occuper de trouver les définitions dans les fichiers cpp (elles pourraient d'ailleurs être présentes dans un librairie (fichier.lib) par exemple).

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
24 mai 2008 à 17:48
Le compilateur va comprendre et va chercher tout seul comme un grand les deux fichiers .cpp qui servent de définition des 2 classes ?


Non, il faut inclure les fichiers ".cpp" dans le projet en cours ! Le compilateur en fera autant de fichiers ".obj" que l'éditeurs de liens rassemblera (avec tout ce qu'il aura à prendre dans des bibliothèques externes standard ou personnelles) pour créer LE fichier exécutable.

Jean-François
3
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
24 mai 2008 à 15:10
Bonjour,

Ce ne serait pas un problème d'inclusions multiples de fichier(s) d'entête ?

Jean-François
0
Kelm0 Messages postés 23 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 juin 2008
24 mai 2008 à 15:37
Non puisque j'ai inclus le fichier de ma classe2 dans le fichier de ma classe1 qui est lui même inclus dans mon main :

Fichier Classe 2 : rien
Fichier Classe 1 : #include "Fclasse2.cpp"
Fichier Main : #include "Fclasse1.cpp"

Pour moi, il n'y a pas de pb de ce côté là ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 mai 2008 à 15:45
#include de .cpp, ce n'est pas normal déja. Il faut include des headers, qui contiennent uniquement des déclarations et non des définitions de méthodes.

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
24 mai 2008 à 16:21
Eh oui on inclut comme ça ! Jamais d'include de fichiers source (c/cpp), la conception est mauvaise.

Il faut 1 fichier d'entête (hpp) qui contient la déclaration des 2 classes puis l'inclure dans les 3 fichiers sources. Ou 2 fichiers d'entête, 1 par classe, et les inclure là où c'est nécessaire, y compris dans d'autre(s) fichier(s) d'entête, ça c'est possible !

Jean-François
0
Kelm0 Messages postés 23 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 juin 2008
24 mai 2008 à 16:27
Ok, donc si je met les déclarations des classes dans des headers et que je défini les methodes dans un autre fichier (.cpp)
alors si je fais dans le fichier main :

#include "Hclasse1.h"
#include "Hclasse2.h"

Le compilateur va comprendre et va chercher tout seul comme un grand les deux fichiers .cpp qui servent de définition des 2 classes ?

(Et cela resoudra mon problème ?)
0
Kelm0 Messages postés 23 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 20 juin 2008
24 mai 2008 à 19:06
D'accord, merci des réponses
0
Rejoignez-nous