J'ai une ancienne base de code ici, où ils ont utilisé des variables membres protégés. Que ce soit ou non une bonne idée peut être discutée. Cependant, le code doit avoir été compilé correctement avec gcc3. J'ai un il y a quelque chose fait avec xAccès protégé membre d'une classe dans une classe dérivée
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
Bar modèle de classe dérivée qui utilise membre protégé x du modèle de classe Foo comme si
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
Et dans la déclaration de la méthode de nettoyage() Cela ne ne fonctionne pas avec gcc4, bien qu'il aurait dû fonctionner avec gcc3. Cela fonctionne quand je le change en
doSomeThingCleanUpLike (this->x);
Pourquoi est-ce le cas?
Le terme «classe de modèle» est souvent source de confusion. Le terme correct est "modèle de classe", car la chose est un modèle pour les classes. Ce n'est pas une classe. Je voudrais éditer votre question mais c'est probablement l'une des raisons pour lesquelles vous êtes confus. – MSalters
Votre définition de fonction de "nettoyage" n'est pas conforme. manque le type de retour et les arguments de modèle pour "Bar". Bien sûr que c'est comme ça dans ton code? –
Merci litb. Je l'ai changé. le niveau de caféine n'était pas assez élevé pour le repérer. Également changé pour "class template". Si son modèle de classe ou de classe ne devrait pas affecter le problème. Le terme est juste utilisé officieusement beaucoup. – GeeF