Как объявить переменную в заголовочном файле для использования в двух .cpp? - PullRequest
3 голосов
/ 23 августа 2010

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

extern HANDLE hPipe;
extern IMediaSample *pSave = NULL;

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

Y.obj : error LNK2005: "struct IMediaSample * pSave" (?pSave@@3PAUIMediaSample@@A) already defined in X.obj

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

Ответы [ 2 ]

14 голосов
/ 23 августа 2010
extern IMediaSample *pSave = NULL;

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

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

extern IMediaSample *pSave;

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

0 голосов
/ 23 августа 2010

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

#ifndef commonh
include common.h
#endif 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...