Utilisation d'un membre de classe parente dans un template
4 réponses
Yann Renard
Bonjour à tous,
j'ai découvert aujourd'hui la chose suivante : la directive "using" est
nécessaire pour utiliser un membre de classe parente dans un template...
le cas d'école :
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
Jean-Marc Bourguet
Yann Renard writes:
C compile alors que B ne compile pas... (avec GCC4, mais il semble que ce soit un changement récent)
Relativement recent.
Ma question : pourquoi diable faut il mettre ce "using" ?
Fait des recherches sur la recherche des noms en deux phases et les noms dependants dans les archives du groupe.
C(void) { this->a = 0; }
est une alternative (ce qui fait que les templates c'est quasiment le seul endroit ou j'utilise this); dans le cas donne, je me demande pourque A n'a pas de constructeur qu'on appellerait avec la liste d'initialisation, je suppose que l'exemple est trop simplifie.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Yann Renard <no@spam.please> writes:
C compile alors que B ne compile pas... (avec GCC4, mais il semble que
ce soit un changement récent)
Relativement recent.
Ma question : pourquoi diable faut il mettre ce "using" ?
Fait des recherches sur la recherche des noms en deux phases et les noms
dependants dans les archives du groupe.
C(void) { this->a = 0; }
est une alternative (ce qui fait que les templates c'est quasiment le seul
endroit ou j'utilise this); dans le cas donne, je me demande pourque A n'a
pas de constructeur qu'on appellerait avec la liste d'initialisation, je
suppose que l'exemple est trop simplifie.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
C compile alors que B ne compile pas... (avec GCC4, mais il semble que ce soit un changement récent)
Relativement recent.
Ma question : pourquoi diable faut il mettre ce "using" ?
Fait des recherches sur la recherche des noms en deux phases et les noms dependants dans les archives du groupe.
C(void) { this->a = 0; }
est une alternative (ce qui fait que les templates c'est quasiment le seul endroit ou j'utilise this); dans le cas donne, je me demande pourque A n'a pas de constructeur qu'on appellerait avec la liste d'initialisation, je suppose que l'exemple est trop simplifie.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Yann Renard
Jean-Marc Bourguet wrote:
Yann Renard writes:
C compile alors que B ne compile pas... (avec GCC4, mais il semble que ce soit un changement récent)
Relativement recent.
Ma question : pourquoi diable faut il mettre ce "using" ?
Fait des recherches sur la recherche des noms en deux phases et les noms dependants dans les archives du groupe.
Ok, je vais aller voir ça.
C(void) { this->a = 0; }
est une alternative (ce qui fait que les templates c'est quasiment le seul endroit ou j'utilise this); dans le cas donne, je me demande pourque A n'a pas de constructeur qu'on appellerait avec la liste d'initialisation, je suppose que l'exemple est trop simplifie.
Exactement, c'était sans intérêt pour l'exemple ;)
Yann
Jean-Marc Bourguet wrote:
Yann Renard <no@spam.please> writes:
C compile alors que B ne compile pas... (avec GCC4, mais il semble que
ce soit un changement récent)
Relativement recent.
Ma question : pourquoi diable faut il mettre ce "using" ?
Fait des recherches sur la recherche des noms en deux phases et les noms
dependants dans les archives du groupe.
Ok, je vais aller voir ça.
C(void) { this->a = 0; }
est une alternative (ce qui fait que les templates c'est quasiment le seul
endroit ou j'utilise this); dans le cas donne, je me demande pourque A n'a
pas de constructeur qu'on appellerait avec la liste d'initialisation, je
suppose que l'exemple est trop simplifie.
Exactement, c'était sans intérêt pour l'exemple ;)
C compile alors que B ne compile pas... (avec GCC4, mais il semble que ce soit un changement récent)
Relativement recent.
Ma question : pourquoi diable faut il mettre ce "using" ?
Fait des recherches sur la recherche des noms en deux phases et les noms dependants dans les archives du groupe.
Ok, je vais aller voir ça.
C(void) { this->a = 0; }
est une alternative (ce qui fait que les templates c'est quasiment le seul endroit ou j'utilise this); dans le cas donne, je me demande pourque A n'a pas de constructeur qu'on appellerait avec la liste d'initialisation, je suppose que l'exemple est trop simplifie.
Exactement, c'était sans intérêt pour l'exemple ;)
Yann
meow
Il me semble aussi que
template <class T> class B : public A<T> { public: B(void) { A<T>::a=0; } };
fonctionne. Par contre
B(void) : A<T>::a(0) {}
ne fonctionne pas et je ne sais ni pourquoi ni comment écrire ça correctement.
Il me semble aussi que
template <class T>
class B : public A<T>
{
public:
B(void) { A<T>::a=0; }
};
fonctionne. Par contre
B(void) : A<T>::a(0) {}
ne fonctionne pas et je ne sais ni pourquoi ni comment écrire ça
correctement.
template <class T> class B : public A<T> { public: B(void) { A<T>::a=0; } };
fonctionne. Par contre
B(void) : A<T>::a(0) {}
ne fonctionne pas et je ne sais ni pourquoi ni comment écrire ça correctement.
Jean-Marc Bourguet
"meow" writes:
Il me semble aussi que
template <class T> class B : public A<T> { public: B(void) { A<T>::a=0; } };
fonctionne. Par contre
B(void) : A<T>::a(0) {}
ne fonctionne pas et je ne sais ni pourquoi ni comment écrire ça correctement.
Pas plus que
struct A { int a; }; class B : public A { public: B() : A::a(0) {} };
ne va compiler. Il faut que A ait un constructeur et tu fais
template <class T> class B : public A<T> { public: B() : A<T>(0) {} };
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"meow" <schwarz.ben@gmail.com> writes:
Il me semble aussi que
template <class T>
class B : public A<T>
{
public:
B(void) { A<T>::a=0; }
};
fonctionne. Par contre
B(void) : A<T>::a(0) {}
ne fonctionne pas et je ne sais ni pourquoi ni comment écrire ça
correctement.
Pas plus que
struct A { int a; };
class B : public A
{
public: B() : A::a(0) {}
};
ne va compiler. Il faut que A ait un constructeur et tu fais
template <class T>
class B : public A<T>
{
public:
B() : A<T>(0) {}
};
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
template <class T> class B : public A<T> { public: B(void) { A<T>::a=0; } };
fonctionne. Par contre
B(void) : A<T>::a(0) {}
ne fonctionne pas et je ne sais ni pourquoi ni comment écrire ça correctement.
Pas plus que
struct A { int a; }; class B : public A { public: B() : A::a(0) {} };
ne va compiler. Il faut que A ait un constructeur et tu fais
template <class T> class B : public A<T> { public: B() : A<T>(0) {} };
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org