Probleme d'inclusions multiples

Résolu
ththththth Messages postés 10 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 2 mars 2007 - 14 févr. 2007 à 10:48
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre 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.

11 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
14 févr. 2007 à 13:34
PS 2 : L'inclusion de fonc.h dans STDAFX.H résout aussi le problème....
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 févr. 2007 à 13:00
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.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
14 févr. 2007 à 13:22
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
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
14 févr. 2007 à 13:31
PS : l'ajout du mot clef "inline" devant add résout aussi le problème.
0

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

Posez votre question
ththththth Messages postés 10 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 2 mars 2007
14 févr. 2007 à 13:43
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 !
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
14 févr. 2007 à 13:50
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)
0
ththththth Messages postés 10 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 2 mars 2007
14 févr. 2007 à 13:53
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
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
14 févr. 2007 à 13:57
Si tu ajoutes un func.CPP dans ton projet, il faudra juste inclure stdafx.h au début de func.cpp (c'est tout)
0
ththththth Messages postés 10 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 2 mars 2007
14 févr. 2007 à 16:54
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2007 à 17:06
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
14 févr. 2007 à 20:28
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
0
Rejoignez-nous