Witam
Używam kompilator Visual C++ 2005. Nie chce mi się skompilować taki poniższy kod, wywołuje się unresolved external symbols i odwołanie do metody smart_ptr_interface::release()
template <typename T> class smart_ptr_interface
{
public:
smart_ptr_interface(T* pValue): pData(pValue){}
virtual ~smart_ptr_interface()
{
release();
}
T& operator* ()
{
return *pData;
}
T* operator-> ()
{
return pData;
}
protected:
virtual void release() = 0;
/*{
delete pData;
}*/
protected:
T* pData;
};
template <typename T> class smart_rel_com_ptr: smart_ptr_interface<T>
{
public:
smart_rel_com_ptr(T* pValue): smart_ptr_interface<T>(pValue){}
virtual ~smart_rel_com_ptr(){}
protected:
void release()
{
pData->Release();
delete pData;
}
};
Gdy natomiast zdefiniuję metodę smart_ptr_interface::release() to z kolei jak się wywołuje destruktor dla smart_ptr_interface to mi woła metodę smart_ptr_interface::release() zamiast smart_rel_com_ptr::release(). Moim zdaniem nie powinno być błędu z "unresolved..." to raz a dwa jak już zdefiniuję sobie metodę to jako że ona jest wirtualna to powinna być wywoływana ta z klasy pochodnej. Wiem jak te błędy obejś ale dziwię się że to mi nie działa w ten sposób.