Template et heritage

Le
batyann811
Bonjour,

Je re-débute en C++ après plusieurs années d'abstinence alors si la
question est idiote ne tapez pas trop fort ;-)

Je ne comprends pas pourquoi ce code ne fonctionne pas :

template<class T>
class Temp_A {
protected:
T m_a;
public :
Temp_A(T n) {
m_a = n;
}
};

template<class T>
class Temp_B : public Temp_A<T> {

Temp_B(T n) : Temp_A<T>(n) {
}
int get() {
return m_a; // !! Erreur : `m_a' undeclared (first use this
// function)
}
};

Le membre m_a devrait bien être hérité non ? D'ailleurs sans template ça
marche.

class A {
protected:
int m_a;
public :
A(int n) {
m_a = n;
}
};

class B : public A {

B(int n) : A(n) {
}

int get() {
return m_a;
}
};

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #18578461
batyann811
Bonjour,

Je re-débute en C++ après plusieurs années d'abstinence alors si la
question est idiote ne tapez pas trop fort ;-)

Je ne comprends pas pourquoi ce code ne fonctionne pas :

template<class T>
class Temp_A {
protected:
T m_a;
public :
Temp_A(T n) {
m_a = n;
}
};

template<class T>
class Temp_B : public Temp_A<T> {

Temp_B(T n) : Temp_A<T>(n) {
}
int get() {
return m_a; // !! Erreur : `m_a' undeclared (first use this
// function)
}
};



m_a n'est pas un nom dependant de T donc n'est pas cherche dans Temp_A<T>.

template<class T>
class Temp_B : public Temp_A<T> {

Temp_B(T n) : Temp_A<T>(n) {
}
int get() {
this->return m_a;
}
};

La regle en question a ete introduite dans le processus menant a la norme
de 99 et a mis un certain temps a etre verifiee. Suivant la longueur de
ton abstinence, il n'est pas impossible que tu n'ais jamais vu le probleme
avant.

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
batyann811
Le #18578551
Jean-Marc Bourguet wrote:

La regle en question a ete introduite dans le processus menant a la norme
de 99 et a mis un certain temps a etre verifiee. Suivant la longueur de
ton abstinence, il n'est pas impossible que tu n'ais jamais vu le probleme
avant.



Merci. Ca marche !

Ca fait pas loin de 10 ans que n'ai pas vraiment touché au C++ (java
étant passé par là). En plus je dois aussi avouer que je n'avais jamais
trop joué avec les templates.
Publicité
Poster une réponse
Anonyme