
Возникла небольшая проблем с наследованием и шаблоном.
Использую WinAVR версии 20080610.
Есть базовый класс
Код
//Файл TechObj.h
class TechObj
{
private:
//...
public:
//...
virtual void drv( ) = 0;
virtual void show_lcd( ) = 0;
virtual void show_mnem( ) = 0;
//...
TechObj( ) {};
virtual ~TechObj() {};
};
class TechObj
{
private:
//...
public:
//...
virtual void drv( ) = 0;
virtual void show_lcd( ) = 0;
virtual void show_mnem( ) = 0;
//...
TechObj( ) {};
virtual ~TechObj() {};
};
есть производный класс, с шаблоном (описан в отдельном файле, куда подключается заголовок с базовым классом)
Код
//Файл Dev_vzk.h
#include <TechObj.h>
//...
template < uint8_t NumOfClapans >
class VZK: public TechObj
{
private:
uint8_t someFoo[NumOfClapans ];
public:
//...
void drv();
void show_mnem();
void show_lcd();
//...
VZK( ... ) { ... };
virtual ~VZK() {};
};
#include <TechObj.h>
//...
template < uint8_t NumOfClapans >
class VZK: public TechObj
{
private:
uint8_t someFoo[NumOfClapans ];
public:
//...
void drv();
void show_mnem();
void show_lcd();
//...
VZK( ... ) { ... };
virtual ~VZK() {};
};
методы класса VZK описаны следующим образом
Код
//Файл Dev_vzk.cpp
#include <Dev_vzk.h>
//...
template < uint8_t NumOfClapans >
void VZK<NumOfClapans>::drv()
{
//...
}
#include <Dev_vzk.h>
//...
template < uint8_t NumOfClapans >
void VZK<NumOfClapans>::drv()
{
//...
}
далее, в отдельном файле объявляется объект класса VZK (файл Devs.cpp)
Код
VZK <2> KV71 ( ... );
Всю эту чудо-писанину компилятор с удовольствием переваривает, но линкер говорит свое категорическое "Error 1"
Цитата
obj/Devs.o:(.rodata._ZTV3VZKILh2EE+0x4): undefined reference to `VZK<(unsigned char)2>::drv()'
obj/Devs.o:(.rodata._ZTV3VZKILh2EE+0x6): undefined reference to `VZK<(unsigned char)2>::show_lcd()'
obj/Devs.o:(.rodata._ZTV3VZKILh2EE+0x8): undefined reference to `VZK<(unsigned char)2>::show_mnem()'
make.exe: *** [exe/Project.elf] Error 1
obj/Devs.o:(.rodata._ZTV3VZKILh2EE+0x6): undefined reference to `VZK<(unsigned char)2>::show_lcd()'
obj/Devs.o:(.rodata._ZTV3VZKILh2EE+0x8): undefined reference to `VZK<(unsigned char)2>::show_mnem()'
make.exe: *** [exe/Project.elf] Error 1
Если убрать описание шаблона, то проект собирается без ошибок.
В каком месте я допустил ошибку?
Заранее спасибо за помощь!