2011-04-03 56 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