templates et smart pointers
salut !
J'ai suivi vos indications et essaye de me mettre aux smart_pointers.
Ca a l'air efficace... mais je ne peux les tester !
J'ai donc developpé la classe suivante (pour m'entrainer) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
#include "stdafx.h"
#ifndef __SMART_PTR_CLASS__
#define __SMART_PTR_CLASS__
template< class T >
class PTR
{
private:
T* m_Ptr;
public:
explicit PTR(T* Value);
virtual ~PTR();
void Show();
T* operator ->() { return m_Ptr; }
T& operator *() { return *m_Ptr; }
};
#endif |
le cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
template< class T > PTR<T>::PTR(T* Value):m_Ptr(NULL)
{
if( Value )
m_Ptr = Value;
}
template< class T > PTR<T>::~PTR()
{
if( m_Ptr )
delete m_Ptr;
}
template< class T > void PTR<T>::Show()
{
if( m_Ptr )
cout << m_Ptr << endl;
} |
ca compile trés bien.
Cependant, dans le fichier main, si je met n'importe quoi en relation avec ma classe, j'obtient des erreurs linker !!!
De plus, dans l'arborescence de VC++ pour les classes : si je dbl-clk sur la methode Show, ile me dit qu'il ne peut m'y emmener puisque la methode n'est pas implémentée !
voici mon code sdans 'main"
Code:
1 2 3 4 5 6 7 8 9 10 11
|
#include "stdafx.h"
#include "smart_ptr.h"
int main(int argc, char* argv[])
{
PTR<int> p = PTR<int>(new int);
return 0;
} |
il me jette a la figure les erreur suivantes :
Citation:
Envoyé par VC++
smart.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall PTR<int>::~PTR<int>(void)" (??1?$PTR@H@@UAE@XZ)
smart.obj : error LNK2001: unresolved external symbol "public: __thiscall PTR<int>::PTR<int>(int *)" (??0?$PTR@H@@QAE@PAH@Z)
D
Et question subsidiaire : je construie mon objet. Mais si par defaut je veux lui donner la valeur "n",commet je dois faire, puisque la je dit dans le Ctor "new int" ??
merci