Наследование и шаблоны
От: ahaos  
Дата: 18.04.15 17:45
Оценка:
Имеется сложная структура наследования. Ниже приведен упрощенный код.

template <class TYPE>
class CUMECalcAnaliticOGY : public virtual TYPE
{
public:
    CUMECalcAnaliticOGY();
    virtual ~CUMECalcAnaliticOGY();
}

------------------------------------------------
template <class TYPE>
CUMECalcAnaliticOGY<TYPE>::CUMECalcAnaliticOGY()
{
    SetMetod("Аналитический");
    SetMapMetod("Метод уравнений периодов");
}

template <class TYPE>
CUMECalcAnaliticOGY<TYPE>::~CUMECalcAnaliticOGY()
{

}
------------------------------------------------




template <class TYPE>
class CUMETimeCalcAnaliticOGY : public virtual CUMECalcAnaliticOGY<TYPE>
{
public:
    CUMETimeCalcAnaliticOGY();
    virtual ~CUMETimeCalcAnaliticOGY();
}

------------------------------------------------
template <class TYPE>
CUMETimeCalcAnaliticOGY<TYPE>::CUMETimeCalcAnaliticOGY()
{
}

template <class TYPE>
CUMETimeCalcAnaliticOGY<TYPE>::~CUMETimeCalcAnaliticOGY()
{
    GetValueList().RemoveAll();
}
------------------------------------------------



template <class TYPE, class TYPEM>
class CSEPICPCalcAnaliticOGY : public virtual CUMECalcAnaliticOGY<TYPE>, public virtual TYPEM
{
public:
    CSEPICPCalcAnaliticOGY();
    virtual ~CSEPICPCalcAnaliticOGY();
};

------------------------------------------------
template <class TYPE, class TYPEM>
CSEPICPCalcAnaliticOGY<TYPE, TYPEM>::CSEPICPCalcAnaliticOGY()
{
    SetMetod("Аналитический");
    SetMapMetod("Метод уравнений периодов");
    dWToc=AVECTOR::Zero(ncount);
}

template <class TYPE, class TYPEM>
CSEPICPCalcAnaliticOGY<TYPE, TYPEM>::~CSEPICPCalcAnaliticOGY()
{
}
------------------------------------------------


template <class TYPE, class TYPEM, class TYPEMUL>
class CSEPICPTimeCalcAnaliticOGY : public CUMETimeCalcAnaliticOGY<TYPE>, public CSEPICPCalcAnaliticOGY<TYPE, TYPEM>
{
public:
    CSEPICPTimeCalcAnaliticOGY();
    virtual ~CSEPICPTimeCalcAnaliticOGY();
};


------------------------------------------------
template <class TYPE, class TYPEM, class TYPEMUL>
CSEPICPTimeCalcAnaliticOGY<TYPE, TYPEM, TYPEMUL>::CSEPICPTimeCalcAnaliticOGY()
{

}

template <class TYPE, class TYPEM, class TYPEMUL>
CSEPICPTimeCalcAnaliticOGY<TYPE, TYPEM, TYPEMUL>::~CSEPICPTimeCalcAnaliticOGY()
{
}
------------------------------------------------


//Далее в программе объявляется
p = new CSEPICPTimeCalcAnaliticOGY<CUMEPCalcAnaliticMirror, CSEPICPCalcAnaliticMirror>;

Компиляция проходит нормально, но при линковке выдает ошибку:

error LNK2019:
ссылка на неразрешенный внешний символ "public:
__thiscall CSEPICPTimeCalcAnaliticOGY<class CUMEPCalcAnaliticMirror,class CSEPICPCalcAnaliticMirror>::CSEPICPTimeCalcAnaliticOGY<class CUMEPCalcAnaliticMirror,class CSEPICPCalcAnaliticMirror>(void)" (??0?$CSEPICPTimeCalcAnaliticOGY@VCUMEPCalcAnaliticMirror@@VCSEPICPCalcAnaliticMirror@@@@QAE@XZ) в функции "public: __thiscall CSEPICPModelCalculates::CSEPICPModelCalculates(void)" (??0CSEPICPModelCalculates@@QAE@XZ)


Что здесь не так?
Отредактировано 18.04.2015 18:45 Кодт . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.