如何在头文件中声明要在两个.cpp中使用的变量?

Ala*_*lan 3 c++ syntax

我的目标模块是从构建的可执行文件X.cppY.cpp,这两个两个文件需要一个共同的.h文件:

extern HANDLE hPipe;
extern IMediaSample *pSave = NULL;
Run Code Online (Sandbox Code Playgroud)

但是当我构建模块时,我得到一个错误说:

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

如何解决这个问题?

ken*_*ytm 14

extern IMediaSample *pSave = NULL;
Run Code Online (Sandbox Code Playgroud)

这不仅仅是一个声明.这将定义pSaveNULL.由于两者都.cpp包含.h,因此该变量将以2个翻译单位定义,从而导致冲突.

你应该把它重写为

extern IMediaSample *pSave;
Run Code Online (Sandbox Code Playgroud)

.h,然后添加IMediaSample *pSave = NULL;正好一个.cpps.