"Extern" с переменными DirectX? - PullRequest
1 голос
/ 03 апреля 2011

По какой-то причине, когда я объявляю переменную directx как extern, я получаю ошибку компоновки.

Пример:

В некоторых заголовочных файлах:

extern ID3D10EffectMatrixVariable* pWorldVariable;

В каком-то другом файле cpp, куда я включаю .h файл, содержащий pd3dDevice:

pWorldVariable = NULL;

Появится сообщение об ошибке, похожей на это:

2> main.obj: ошибка LNK2001: неразрешенный внешний символ "struct ID3D10EffectMatrixVariable * pProjectionVariable" (? PProjectionVariable @@ 3PAUID3D10EffectMatrixVariable @@ A) 2> C: \ Users \ steve \ documents \ visual studio 2010 \ Projects \ Shyr \ Debug \ Shyr.exe: фатальная ошибка LNK1120: 1 неразрешенный внешний текст

В ту минуту, когда я убираю декларацию extern, она компилируется как шарм. Конечно, я на самом деле хочу сослаться на несколько переменных, таких как цепочка подкачки, устройство, представление цели и т. Д. Из библиотеки, над которой я работаю. Кто-нибудь знает, что случилось?

(Кроме того, ДА, заявлено только один раз)

Просто чтобы доказать, что проблема изолирована от переменных DirectX, я создал внешнюю переменную "george" и инициализировал ее значением 4. Затем я сослался на нее в другом месте и изменил значение. Скомпилировано просто отлично.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

extern используется для объявления своего рода ссылки на переменную, которая используется внешне в исходных файлах (т. Е. Вы объявляете переменную обычно, и в каждом используемом вами файле вы должны объявлять внутренний ссылка на него с использованием extern)

Вы должны также объявить переменную в исходном файле.

Example.cpp

ID3D10EffectMatrixVariable* pWorldVariable = 0;

YetAnotherFile.cpp

extern ID3D10EffectMatrixVariable * pWorldVariable;
0 голосов
/ 03 апреля 2011

Проблема, с которой я столкнулся, заключалась в непонимании внешнего объявления и определения. Этот ответ помогает, но вы должны прочитать все это, а затем провести некоторое исследование, чтобы понять его:

В чем разница между определением и декларацией?

...