Имя пользователя:
Пароль:
 

Показать сообщение отдельно

ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата 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; // правильное написание команды не помню, но примерно так

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 08:16, 14-03-2011 | #2