Inclusion d'un header dans plusieur fichier [Résolu]

Signaler
Messages postés
24
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
27 avril 2010
-
Messages postés
24
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
27 avril 2010
-
J'ai un header qui defini quelque prototype. Lorsque je l'include dans
plusieur cpp, ca genere une erreur lorsqu'il link. Comment faire pour
avoir un header avec des prototype inclu dans plusieur fichier?



Merci d'avance



Pinky84

6 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Ne déclare JAMAIS des variables dans une entêtes, au pire met les extern sans init. Mais les déclararions et init dans un .c ou .cpp. Fait déjà cela, si ca se trouve ça suffira.

Le _ devant le nom des fonctions est-il bien également dans les noms de fonctions du .c ou .cpp ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Au début de ton header



#ifndef FICHIER_H

#define FICHIER_H



// tes déclarations



#endif



Comme ca tu es sur que ton fichier n'est inclus qu'une fois
Messages postés
24
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
27 avril 2010

J'avais deja fait ca... je comprend pas trop le probleme.. il n'y a pas
que des prototype de function dans mon h, il y a quelque typedef, des
declaration de variable.. etc. mais quand il link il dit 'Already
defined' juste pour les function.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
C'est normal qu'il y ai de mutiples définitions si du défini des
fonctions non template et non inline dans un header, elles doivent etre
définient dans un .cpp.



La règle (pour les variables comme pour les fonctions) c'est de
multiples déclarations (jusqu'à une par unité de compilation)
mais une seule définition.
Messages postés
24
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
27 avril 2010

c'est pourtant ce que j'ai fais (je crois).. enfin.. si vous voulez bien jeter un coup d'oeil:



#ifndef UXTHEME_H

#define UXTHEME_H



#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0501

#endif



#include <windows.h>

#include <commctrl.h>

#include

#include <tmschema.h>



typedef HRESULT (WINAPI *LPCLOSETHEMEDATA)(HTHEME);

typedef HRESULT (WINAPI *LPDRAWTHEMEBACKGROUND) (HTHEME, HDC, int, int, const RECT *, const RECT *);

typedef HRESULT (WINAPI *LPDRAWTHEMEPARENTBACKGROUND) (HWND, HDC, RECT *);

typedef HRESULT (WINAPI *LPGETBACKGROUNDCONTENTRECT) (HTHEME, HDC, int, int, const RECT *, RECT *);

typedef BOOL (WINAPI *LPISTHEMEBACKGROUNDPARTIALLYTRANSPARENT) (HTHEME, int, int);

typedef HTHEME (WINAPI *LPOPENTHEMEDATA) (HWND, LPCWSTR);



HMODULE g_hUxTheme = NULL;



LPCLOSETHEMEDATA gp_CloseThemeData = NULL;

LPDRAWTHEMEBACKGROUND gp_DrawThemeBackground = NULL;

LPDRAWTHEMEPARENTBACKGROUND gp_DrawThemeParentBackground = NULL;

LPGETBACKGROUNDCONTENTRECT gp_GetBackgroundContentRect = NULL;

LPISTHEMEBACKGROUNDPARTIALLYTRANSPARENT gp_IsThemeBackgroundPartiallyTransparent = NULL;

LPOPENTHEMEDATA gp_OpenThemeData = NULL;



extern HRESULT _CloseThemeData(HTHEME hTheme);

extern HRESULT _DrawThemeBackground(HTHEME hTheme, HDC hDc, int
iPartId, int iState, const RECT *p_rcRect, const RECT *p_rcClip);

extern HRESULT _DrawThemeParentBackground(HWND hWndControl, HDC hDcControl, RECT *p_rcRect);

extern HRESULT _GetBackgroundContentRect(HTHEME hTheme, HDC hDc, int
iPartId, int iState, const RECT *p_rcBound, RECT *p_rcContent);

extern BOOL _IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iState);

extern HTHEME _OpenThemeData(HWND hWndControl, LPCWSTR pszClassList);



#endif
Messages postés
24
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
27 avril 2010

Oui il y a le _ devant les nom de unction dans le cpp. Et oui ca a suffi. Ca compile maintenant



Merci