1Дек/090
Ошибка линковки при объявлении класса
Итак, в процессе моего знакомства с таким замечательным инструментом как класс столкнулся с проблемой. Точнее даже с двумя.
1. Если мы объявляем шаблонный класс в заголовке, а его функции в прилагаемом файле cpp то компиляток выдаёт ошибку:
1>test001.obj : error LNK2019: unresolved external symbol "public: __thiscall tester::~tester(void)" (??1?$tester@H@@QAE@XZ) referenced in function _wmain
Код:
//test_class.h template <typename MyType> class tester { MyType *a; public: tester(); ~tester(); };
//test_class.cpp #include "test_class.h" template <typename MyType> tester::tester(): a(NULL) {} template <typename MyType> tester<MyType>::~tester() { delete a; }
//Main - test001.cpp #include "test_class.h" int main() { tester<int> a1; return 0; }
Решается переносом функций класса в заголовок.
2. Если мы объявляем обычный класс в заголовке вместе со своими функциями, то опять получаем ошибку линковки...
1>test001.obj : error LNK2005: "public: __thiscall tester::tester(void)" (??0tester@@QAE@XZ) already defined in stdafx.obj
Код:
//test_class.h class tester { int *a; public: tester(); ~tester(); }; tester::tester(): a(NULL) {} tester::~tester() { delete a; }
//Main - test001.cpp #include "test_class.h" int main() { tester a1; return 0; }
Решается переносом функций класса в отдельный файл.
Leave a comment