Записки программиста Программирование и не только

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&lt;MyType&gt;::~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;
}

Решается переносом функций класса в отдельный файл.

Метки записи: Оставить комментарий
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Trackbacks are disabled.