OVH Cloud OVH Cloud

Initialisation d'un membre dans un template

2 réponses
Avatar
rozwel
Bonjour,

Voilà mon problème, j'ai un template qui se définit en gros comme ça :

template<class X>
class ListElement{
private:
X m_val;
public:
ListElement<X>();
ListElement<X>(X val):m_val(val);
}

Comment faire pour que m_val soit initialisé avec le constructeur sans
paramètres de la classe X quand j'appelle le constructeur ListElement<X>() ?

J'ai essayé d'implémenter un truc comme ça :
template <class X>

ListElement<X>::ListElement<X>():m_val(){}

ou comme ça

ListElement<X>::ListElement<X>(){
m_val = X();
}

mais par exemple avec des int ça ne fonctionne pas : il me laisse une valeur
aléatoire dedans.

Merci d'avance pour votre aide.

rozwel

2 réponses

Avatar
Guillaume Gourdin
Comment faire pour que m_val soit initialisé avec le constructeur sans
paramètres de la classe X quand j'appelle le constructeur ListElement<X>()
?


Pas besoin d'appeler le constructeur de m_val. Cette valeur sera
automatiquement construite avec le constructeur par défaut, pour peu qu'il
s'agisse d'une classe.

mais par exemple avec des int ça ne fonctionne pas : il me laisse une
valeur

aléatoire dedans.


Normal, les types de base ne sont pas des classes, et n'ont donc pas de
constructeurs, et sont donc initialisée avec la valeur qui se trouve à
l'endroit où est créée la variable. Si tu veux une valeur initialisée à
zéro, il faut faire :

ListElement<X>::ListElement<X>()
:
m_val(0)
{
}

Avatar
Loïc Joly
rozwel wrote:

Bonjour,

Voilà mon problème, j'ai un template qui se définit en gros comme ça :

template<class X>
class ListElement{
private:
X m_val;
public:
ListElement<X>();
ListElement<X>(X val):m_val(val);
}

Comment faire pour que m_val soit initialisé avec le constructeur sans
paramètres de la classe X quand j'appelle le constructeur ListElement<X>() ?

J'ai essayé d'implémenter un truc comme ça :
template <class X>

ListElement<X>::ListElement<X>():m_val(){}


Chez moi ça marche, mis à part quelques problèmes de syntaxes dues
probablement à la recopie dans ton message.

Quel compilateur utilises-tu ?

--
Loïc