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

时间:2010-08-23 15:01:28

标签: c++ syntax

我的目标模块是可以从X.cppY.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 个答案:

答案 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