Pourquoi ne peut pas un compilateur C++ reconnaître que g()
et b
sont membres hérités de Superclass
comme on le voit dans ce code:accès membres protégés de superclasse en C++ avec des modèles
template<typename T> struct Superclass {
protected:
int b;
void g() {}
};
template<typename T> struct Subclass : public Superclass<T> {
void f() {
g(); // compiler error: uncategorized
b = 3; // compiler error: unrecognized
}
};
Si je simplifie Subclass
et juste hériter de Subclass<int>
puis il compile. Il compile également lorsqu'il qualifie entièrement g()
en tant que Superclass<T>::g()
et Superclass<T>::b
. J'utilise LLVM GCC 4.2.
Remarque: Si je fais g()
et b
public dans la superclasse, il échoue toujours avec la même erreur.
Les compilateurs de Microsoft ne respectent pas cette règle. Je suis en colère –
Merci, cela fonctionne. – andrewz
@Armen: seulement cette règle? Wow, ça a vraiment * s'est * amélioré. :-D –