2010-08-23 2 views
3

Мой целевой модуль представляет собой исполняемый файл, чтобы быть построен из X.cpp и Y.cpp, как эти два файла нужен общий .h файл:Как объявить переменную в файле заголовка, которая будет использоваться в двух .cpp?

extern HANDLE hPipe; 
extern IMediaSample *pSave = NULL; 

Но когда я скомпилировать модуль, я получил сообщение об ошибке сказав:

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

Как решить эту проблему?

ответ

14
extern IMediaSample *pSave = NULL; 

Это не просто декларация. Это определит pSave до NULL. Так как оба .cpp включают .h, эта переменная будет определена в 2 единицах перевода, что вызывает конфликт.

Вы должны просто переписать его как

extern IMediaSample *pSave; 

в .h, затем добавить IMediaSample *pSave = NULL; в точности один из .cpp с.

0

попробуйте использовать инструкцию ifndef. определить переменную уникальным для каждого файла заголовка вы создаете то время как в том числе использование что-то вроде:

#ifndef commonh 
include common.h 
#endif 
+0

Я уже пробовал этот трюк, не работает .. – Alan

+4

Включите защитные ограждения, чтобы защитить вас от включения заголовка умножить * в том же исходном файле *, а не в разных. –

+0

Если вы не включите охрану в файл заголовка ... – TJMonk15

Смежные вопросы