Probleme d'inclusions multiples [Résolu]

Messages postés
10
Date d'inscription
vendredi 23 avril 2004
Dernière intervention
2 mars 2007
- - Dernière réponse : yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 14 févr. 2007 à 20:28
Bonjour à tous.

Voila je passe de devCpp a visual .net et j'ai déjà un problème avec les mfc (snif).

L'application est basée juste sur une boite de dialogue générée par visual (2005).
Je me retrouve avec les fichiers :
-FontDesigner.h
-FontDesignerDlg.h
et les équivalents .cpp
ainsi que les resource et stdafx

Je dessine mon IHM ... tout va bien.

J'aimerais maintenant me servir de classes et fichiers .h de fonctions, mais je n'arrive pas à les inclure sans erreurs.
J'ai fais un petit fichier de test : fonc.h
#ifndef FONC_H

#define

FONC_H#pragma

once




int add(int x, int y){return (x+y);}
#endif

Puis je veux l'inclure dans FontDesignerDlg.h. (Si je l'inclue dans FontDesignerDlg.cpp ca marche, mais le but est d'inclure une classe (X) pour ajouter une variable de type (X) à la classe FontDesignerDlg).

J'obtiens alors les erreurs :

FontDesignerDlg.obj : error LNK2005: "int __cdecl add(int,int)" (?add@@YAHHH@Z) déjà défini(e) dans FontDesigner.obj

1>FontDesigner\FontDesigner\Debug\FontDesigner.exe : fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés

1>Le journal de génération a été enregistré à l'emplacement "FontDesigner\FontDesigner\Debug\BuildLog.htm"

1>FontDesigner - 2 erreur(s), 2 avertissement(s)

J'ai compris que le problème vient d'inclusions multiples, mais je ne comprends pas comment sachant que je place des ifndef + des #pragma once sur chaque fichier.

Dans le .h de la classe FontDesignerDlg :#pragma

once#include

"afxwin.h"#include

"afxcmn.h"



#include"fonc.h"

Debutant sur visual, j'essaie de batailler avec les propriétés de mon projet, mais beaucoup de choses ne sont pas encore très claires tellement il y a de paramètres....

Voila en gros mon problème. Si j'ai été assez clair et si quelqu'un veut et peut m'aider alors un grand merci d'avance.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
3
Merci
PS 2 : L'inclusion de fonc.h dans STDAFX.H résout aussi le problème....

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
0
Merci
Ca n'a rien a voir avec des pbs de macro (ifndef ou autre) c'est un pb de lien. Le pb est que tu mets le code de la fonction dans .h alors qu'il doit etre dans le .cpp.
Commenter la réponse de luhtor
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
0
Merci
Salut, a mon avis :
Problème d'entete précompilée :

Il suffit d'inclure stdafx.h au début de fonc.h
OU
Demander que CE module ne fasse pas partie de l'entete précompilée dans les options du fichier .h/.cpp
Commenter la réponse de yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
0
Merci
PS : l'ajout du mot clef "inline" devant add résout aussi le problème.
Commenter la réponse de yann_lo_san
Messages postés
10
Date d'inscription
vendredi 23 avril 2004
Dernière intervention
2 mars 2007
0
Merci
hello luthor
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Ca n'a rien a voir avec des pbs de macro (ifndef ou autre) c'est un pb de lien. Le pb est que tu mets le code de la fonction dans .h alors qu'il doit etre dans le .cpp.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Le problème de mettre le code dans le .cpp : ca marche pour une fonction, mais pas pour les classes.

hello yann_lo_san
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Il suffit d'inclure stdafx.h au début de fonc.h
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
idem

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Demander que CE module ne fasse pas partie de l'entete précompilée dans les options du fichier .h/.cpp
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
je cherche encore dans les propriétés du projets...

Merci quand même !
Commenter la réponse de ththththth
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
0
Merci
Après test :

Il faut OU ajouter le mot clef inline devant add
OU
inclure func.h dans stdafx.h (si une classe est présente dans func.h)
Commenter la réponse de yann_lo_san
Messages postés
10
Date d'inscription
vendredi 23 avril 2004
Dernière intervention
2 mars 2007
0
Merci
ok desole je n'avais pas vu tes autres post

J'ai inclus le .h dans stdafx et c'est parfait.

Je vais tout de suite essayer avec des classes plus complexes.

Merci beaucoup
Commenter la réponse de ththththth
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
0
Merci
Si tu ajoutes un func.CPP dans ton projet, il faudra juste inclure stdafx.h au début de func.cpp (c'est tout)
Commenter la réponse de yann_lo_san
Messages postés
10
Date d'inscription
vendredi 23 avril 2004
Dernière intervention
2 mars 2007
0
Merci
Bon bah en finalement retour au point de départ ...

Dès que je veux me servir de ma classe ex : le constructeur. Je retrouve ma fameuse erreur error LNK2005. Je n'y comprend rien.

Pourquoi est-ce si compliquer d'inclure des fichiers.... J'ai essayer les méthodes ci-dessus. Rien n'y fait.

Si quelqu'un a une idée... Merci d'avance
Commenter la réponse de ththththth
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
Commenter la réponse de SAKingdom
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
0
Merci
Il ne faut pas se prendre la tete, il faut juste suivre 2 principes :
1 - Lever pour le nouveau module la gestion d'entete précompilée
2 - Ne rien inclure dans le nouveau .h et inclure stdafx.h dans le nouveau .cpp
Commenter la réponse de yann_lo_san

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.