Доброго времени суток.
Есть простенький код на С++ который не компилируется.
Базовый класс:
// base.h
template<class T>
class Base
{
public:
T getData();
virtual T prepareData() = 0;
};
// base.cpp
#include "base.h"
template<class T>
T Base<T>::getData()
{
return prepareData();
}
Дочерний класс:
// target.h
#include <QList>
#include "base.h"
class Target : public Base<QList<int> >
{
public:
Target();
virtual QList<int> prepareData();
};
// target.cpp
#include "target.h"
Target::Target() :
Base<QList<int> >()
{
}
QList<int> Target::prepareData()
{
return QList<int>();
}
Место вызова:
// main.cpp
#include "target.h"
#include <QList>
int main(int arcv, char** argc) {
QList<int> d = Target().getData(); // undefined reference to `Base<QList<int> >::getData()'
return 0;
}
Как я понимаю, дочерний класс должен включить в себя методы базового класса и развернуть шаблоны в конкретные типы (чего, как я понял не произошло). ЧЯДНТ?