2010-08-23 3 views
3

Mon module cible est un fichier exécutable à être construit à partir X.cpp et Y.cpp, à la fois ces deux fichiers ont besoin d'un fichier .h commun:Comment déclarer une variable dans un fichier d'en-tête à utiliser dans deux fichiers .cpp?

extern HANDLE hPipe; 
extern IMediaSample *pSave = NULL; 

Mais quand je construis le module, je suis une erreur en disant:

Y.obj : error LNK2005: "struct IMediaSample * pSave" ([email protected]@[email protected]@A) already defined in X.obj 

Comment résoudre ce problème?

Répondre

14
extern IMediaSample *pSave = NULL; 

Ce n'est pas seulement une déclaration. Cela définira pSave à NULL. Puisque les deux .cpp incluent le .h, cette variable sera définie en 2 unités de traduction, ce qui provoque le conflit.

Vous devez simplement réécrire comme

extern IMediaSample *pSave; 

dans le .h, puis ajoutez IMediaSample *pSave = NULL; exactement un des .cpp s.

0

essayez d'utiliser l'instruction ifndef. définir une variable unique à chaque fichier d'en-tête que vous créez ensuite tout en incluant utiliser quelque chose comme:

#ifndef commonh 
include common.h 
#endif 
+0

J'ai déjà essayé cette astuce, ne fonctionne pas .. – Alan

+4

Les gardes d'inclusion vous protègent contre l'inclusion d'un en-tête multiple * dans le même fichier source *, pas dans des fichiers différents. –

+0

Sauf si vous mettez le garde d'inclusion dans le fichier d'en-tête ... – TJMonk15

Questions connexes