我的目标模块是可以从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
如何解决这个问题?
答案 0 :(得分:14)
extern IMediaSample *pSave = NULL;
这不仅仅是一个声明。这会将pSave
定义为NULL
。由于.cpp
都包含.h
,因此此变量将以2个翻译单位定义,从而导致冲突。
你应该把它重写为
extern IMediaSample *pSave;
<{1>}中的,然后在.h
中的一个IMediaSample *pSave = NULL;
中添加.cpp
。
答案 1 :(得分:0)
尝试使用ifndef语句。定义一个对你创建的每个头文件唯一的变量,同时包括使用类似的东西:
#ifndef commonh
include common.h
#endif