Товарищи, собратья по КуТэ... вопрос не совсем в КуТэ но я пишу под QtSDK
НЕ ПОНИМАЮ В ЧЕМ ОШИБКА!!!!
ОБЪЯСНИТЕ ПОЖАЛУЙСТА!!!!
Заранее извиняюсь за название классов , но они отражают суть проблеммы... и мое к ней отношение
вот хедер
CODE
#ifndef ZAELO_H
#define ZAELO_H
template <class C>
class Zaelo
{
public:
virtual ~Zaelo();
protected:
Zaelo(int a = 0);
private:
int a_;
};
template <class C>
class Ox : public Zaelo<C>
{
public:
Ox(int a = 0);
virtual ~Ox();
};
#endif // ZAELO_H
#define ZAELO_H
template <class C>
class Zaelo
{
public:
virtual ~Zaelo();
protected:
Zaelo(int a = 0);
private:
int a_;
};
template <class C>
class Ox : public Zaelo<C>
{
public:
Ox(int a = 0);
virtual ~Ox();
};
#endif // ZAELO_H
вот cpp
CODE
#include "Zaelo.h"
template <class C>
Zaelo<C>::Zaelo(int a)
: a_(a)
{
}
template <class C>
Zaelo<C>::~Zaelo()
{
}
template <class C>
Ox<C>::Ox(int a)
: Zaelo<C>(a)
{
}
template <class C>
Ox<C>::~Ox()
{
}
template <class C>
Zaelo<C>::Zaelo(int a)
: a_(a)
{
}
template <class C>
Zaelo<C>::~Zaelo()
{
}
template <class C>
Ox<C>::Ox(int a)
: Zaelo<C>(a)
{
}
template <class C>
Ox<C>::~Ox()
{
}
а это main
CODE
#include <QtCore/QCoreApplication>
#include "Zaelo.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Ox<int> b;
return a.exec();
}
#include "Zaelo.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Ox<int> b;
return a.exec();
}
так вот эта штука выдает при компиляции
C:/PROJECTS/Zaebalo/main.cpp:7: undefined reference to `Ox<int>::Ox(int)'
C:/PROJECTS/Zaebalo/main.cpp:8: undefined reference to `Ox<int>::~Ox()'
C:/PROJECTS/Zaebalo/main.cpp:8: undefined reference to `Ox<int>::~Ox()'
:-1: error: collect2: ld returned 1 exit status
внимание знатоки... вопрос ... "ПОЧЕМУ"
если перенести код из cpp в h то все работает, если написать inline функции в хедере то тоже работает..
ПОЖАЛУЙСТА ОБЪЯСНИТЕ ПОЧЕМУ
П.С. это искренний крик души
П.С.С. толи лыжи не едут... толи я увлекся проектированием вместо кодинга...