Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

template et conflit de noms

2 réponses
Avatar
henri
Bonjour,

Ce code ne compile pas ( avec g++ 3.2 ) :

template <class T, int N>
class Hash
{
int size;
// .....

public:
int size();
// ......
};

Si je comprends le message du compilateur, on me dit que size est déclaré 2
fois.. Comment contourner le problème ?

Merci de votre aide.

2 réponses

Avatar
Fabien LE LEZ
On Sat, 10 Jul 2004 02:42:49 +0200, "henri" :

int size;
int size();

Si je comprends le message du compilateur, on me dit que size est déclaré 2
fois..


C'est bien le cas : il n'est pas possible d'avoir une variable et une
fonction avec le même nom, dans le même scope.
Ça n'a rien à voir avec les templates, ni même avec le fait d'être à
l'intérieur d'une classe.

Comment contourner le problème ?


Changer le nom de la variable ou de la fonction.
Je conseille même d'utiliser des conventions différentes pour les
variables et les fonctions. Perso je mets toujours les initiales d'une
fonction en majuscules :

int size();
int Size();

D'ailleurs, histoire de ne pas être emmerdé avec les conflits de noms,
j'écris souvent mes identifiants en français, pour qu'il n'y ait aucun
risque de confusion avec les fonctions de la SL :

int taille;
int Taille();


Note : si jamais tu veux offrir la même interface que les conteneurs
de la STL, tu peux écrire :

size_t size_;
size_t size();



--
schtroumpf schtroumpf
Jean-Emile de France

Avatar
drkm
"henri" writes:

Si je comprends le message du compilateur, on me dit que size est déclaré 2
fois.. Comment contourner le problème ?


Changer de nom ?

--drkm