Bonjour,

Je suis en train de développer une fonction sur une classe SmartPointer que j'ai déja développer.

Cette fonction à pour but de retouner un smartPointer d'un autre Type mais partageant le meme pointeur que le premier. Je m'en sert pour le polymorphisme.

Ma fonction marche très bien sauf que si je concerve certaines données en private ca compile pas avec cet erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
../library/libutils/smartpointer.h:254: error: 'SDLWidget* SmartPointer<SDLWidget>::ref' is private
../library/libutils/smartpointer.h:139: error: within this context
../library/libutils/smartpointer.h:255: error: 'unsigned int* SmartPointer<SDLWidget>::refCount' is private
../library/libutils/smartpointer.h:140: error: within this context
voici ma fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
template <class X>
SmartPointer<X> Cast(SmartPointer<T> &_smartPointer, X* _dummy)
{
	SmartPointer<X> newSmartPointer;
 
	mModRef.Lock();
	newSmartPointer.ref = (X*)_smartPointer.ref;
	newSmartPointer.refCount = _smartPointer.refCount;
	*refCount++;
	mModRef.Unlock();
 
	return newSmartPointer;
}
Aparemment le probleme c'est que dans ce cas les variables ref et refCount deviennent privée pour la meme classe à cause du template.

J'ai essayer de résoudre mon probleme en ajoutant un :
friend class Smartpinter; (ce qui est bizard dans la classe smarpointer dailleur) mais ca marche pas...

En attendant je met tout en public mais j'aurais aimé trouver une solution plus propre à ce probleme...

Quelqu'un à une idée ???

Merci