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