Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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) { }
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 :
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) { }
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
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.