Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Последняя ошибка компоновщика (http://forum.oszone.net/showthread.php?t=201915)

ManHack 13-03-2011 22:25 1634179

Последняя ошибка компоновщика
 
Здравствуйте. Объясните пожалуйста что за ерунда такая:
Цитата:

1> Generating Code...
1>bvh.obj : error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function "public: void __thiscall BVH::build(class std::vector<class Primitive *,class std::allocator<class Primitive *> > const &)" (?build@BVH@@QAEXABV?$vector@PAVPrimitive@@V?$allocator@PAVPrimitive@@@std@@@std@@@Z)
1>geometry_group.obj : error LNK2001: unresolved external symbol __imp___CrtDbgReportW
1>grid.obj : error LNK2001: unresolved external symbol __imp___CrtDbgReportW
1>PhotonTracer.obj : error LNK2001: unresolved external symbol __imp___CrtDbgReportW
1>C:\Users\СтИВ\Documents\Visual Studio 2008\Projects\PMRender\Debug\PMRender.exe : fatal error LNK1120: 1 unresolved externals
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Среда разработки: Visual Studio 2010.
Использую внешние либы в проекте: BOOST и SDL.

Самое странное: когда билдю релизную версию, она компилится нормально (и запускается), а дебажная выдаёт такие непонятные ошибки :(

El Scorpio 14-03-2011 08:16 1634347

Цитата:

Цитата ManHack
1>bvh.obj : error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function "public: void __thiscall BVH::build(class std::vector<class Primitive *,class std::allocator<class Primitive *> > const &)" (?build@BVH@@QAEXABV?$vector@PAVPrimitive@@V?$allocator@PAVPrimitive@@@std@@@std@@@Z) »

Как видно, ошибка возникает при работе с шаблонами классов.
Судя по всему, соответствующий код не был скомпилирован на этапе подготовки модуля - ввиду отсутствия вызова указанной функции в этом модуле - однако указанная функция вызывается в другом модуле. Как следствие, на этапе линковки обнаруживается, что нужный код в obj модуля отсутствует.

Вариантов тут два
1. Перенести весь "шаблонный" код в заголовок модуля (.h) - данный код будет скомпилирован в процессе подключения этого заголовка к cpp-файлу.
2. Добавить в заголовок команды принудительной компиляции кода шаблонного класса для указанного класса-параметра
extract template <param> class; // правильное написание команды не помню, но примерно так


Время: 12:17.

Время: 12:17.
© OSzone.net 2001-