Почему если я выношу описания классов и реализацию в отдельные файлы (например AbstractItem.h и AbstractItem.cpp для класса AbstractItem) то компиляция проходит нормально но компоновщик выдает ошибки:
------------------
Test.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall Derived<class AbstractItem *>::~Derived<class AbstractItem *>(void)" (??1?$Derived@PAVAbstractItem@@@@UAE@XZ)
Test.obj : error LNK2001: unresolved external symbol "public: __thiscall Derived<class AbstractItem *>::Derived<class AbstractItem *>(class AbstractItem *)" (??0?$Derived@PAVAbstractItem@@@@QAE@PAVAbstractItem@@@Z)
------------------
Test.obj в данном случае содержит функцию main
Причем "dumpbin -symbols Derived.obj" выдает следующее
---------------------
Dump of file Derived.obj
2CF .debug$S
38 .debug$T
4B .drectve
---------------------
Почему не скомпилировались функции?
Когда все находится в одном файле все проходит нормально.
Использую Visual C++ v6.0 SP5.
Здравствуйте Василий Сухачев, Вы писали:
ВС>Вопрос скорее к знатокам MS Visual C++.
ВС>Почему если я выношу описания классов и реализацию в отдельные файлы (например AbstractItem.h и AbstractItem.cpp для класса AbstractItem) то компиляция проходит нормально но компоновщик выдает ошибки
А, случайно, не пытаетесь разнести шаблоны:
template <class T>
class Base
и
template <class T>
class Derived : public Base<T>
на объявление в *.h и определение в *.cpp файл[ы]?
Если это так, то все верно шаблоны в VC++ должны быть объявленны и определены в одном заголовочном файле. Это связанно с тем что компилятор на их основе генерирует классы по заданному подходящему набору аргументов шаблона. И, следовательно, компилятору необходимо иметь под рукой полное определение шаблона.
Здравствуйте Krom, Вы писали:
K>А, случайно, не пытаетесь разнести шаблоны: K>template <class T> K>class Base K>и K>template <class T> K>class Derived : public Base<T> K>на объявление в *.h и определение в *.cpp файл[ы]?
Именно так я и поступал Ж:| А я то все недоумевал почему есть только afxtmpl.h...
Благодарю.