2011-04-03 69 views
1

由于某些原因,每当我声明一个directx变量作为extern,我收到一个链接错误。带有DirectX变量的“Extern”?

实施例:

在一些头文件:

extern ID3D10EffectMatrixVariable* pWorldVariable; 

在一些其它的cpp文件,其中我包括含有h文件pd3dDevice:

pWorldVariable = NULL; 

类似于此旨意的错误弹出:

2> ma in.obj:error LNK2001:无法解析的外部符号“struct ID3D10EffectMatrixVariable * pProjectionVariable”(?pProjectionVariable @@ 3PAUID3D10EffectMatrixVariable @@ A) 2> C:\ Users \ steve \ documents \ visual studio 2010 \ Projects \ Shyr \ Debug \ Shyr。 exe:致命错误LNK1120:1无法解析的外部设备

我拿走了extern声明的分钟,它编译得像一个魅力。当然,我实际上想引用一些变量,比如我的交换链,设备,目标视图等等。任何人都知道发生了什么事?

(此外,YES,它只是声明了一次)

只是为了证明这个问题被隔离到DirectX变量,我做了一个外部变量“乔治”,并将其初始化为4。然后,我引用它和其他地方改变了价值。编译得很好。

+0

错误消息抱怨pProjectionVariable,不pWorldVariable。不过,需要*定义*。 – 2011-04-03 02:38:26

+0

这看起来肯定是问题。我正在切换这么多变量,试图弄清楚什么是错误的,我没有意识到我复制了错误的错误。也就是说,所有奇怪的directx链接错误的错误都是相同的。当它们被声明和定义时,它就可以工作。这就是说 - 你怎么能够在外部定义一个交换链?它需要清零内存并做一堆其他定义? – Darkenor 2011-04-03 02:51:37

回答

2

extern用来排序的参考申报时使用外部跨源文件(即您声明的变量通常在每个文件你使用它,你要申报内部引用它的变量使用extern

您还必须在源文件中声明变量。

Example.cpp

ID3D10EffectMatrixVariable* pWorldVariable = 0; 

YetAnotherFile.cpp

extern ID3D10EffectMatrixVariable * pWorldVariable; 
+0

我不认为这是问题。我之前使用过extern其他方式,我只是通过将其保存为标准变量来尝试,然后在另一个文件中将其作为extern引用,并且错误仍然出现。 – Darkenor 2011-04-03 02:14:28

+0

您应该在源文件中声明不在头文件中的变量。如果没有,请给它一个镜头。 – 2011-04-03 02:27:03

+1

这不是因为DirectX类型。 DirectX结构只是用户定义的实体,它们不会被链接器接受任何“特殊”处理。 – 2011-04-03 02:29:07