Probleme d'inclusions multiples [Résolu]

ththththth 10 Messages postés vendredi 23 avril 2004Date d'inscription 2 mars 2007 Dernière intervention - 14 févr. 2007 à 10:48 - Dernière réponse : yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention
- 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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 14 févr. 2007 à 13:34
3
Merci
PS 2 : L'inclusion de fonc.h dans STDAFX.H résout aussi le problème....

Merci yann_lo_san 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de yann_lo_san
luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 14 févr. 2007 à 13:00
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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 14 févr. 2007 à 13:22
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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 14 févr. 2007 à 13:31
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
ththththth 10 Messages postés vendredi 23 avril 2004Date d'inscription 2 mars 2007 Dernière intervention - 14 févr. 2007 à 13:43
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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 14 févr. 2007 à 13:50
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
ththththth 10 Messages postés vendredi 23 avril 2004Date d'inscription 2 mars 2007 Dernière intervention - 14 févr. 2007 à 13:53
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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 14 févr. 2007 à 13:57
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
ththththth 10 Messages postés vendredi 23 avril 2004Date d'inscription 2 mars 2007 Dernière intervention - 14 févr. 2007 à 16:54
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
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 14 févr. 2007 à 17:06
Commenter la réponse de SAKingdom
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 14 févr. 2007 à 20:28
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.