Appel de méthode protected dans une classe fille
Bonjour,
Je suis devant un problème de d'erreur de compilation que je n'arrive pas à comprendre. Voici le code (simplifié bien sur) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <iostream>
class A
{
public:
virtual ~A() {}
protected:
virtual void f() const { std::cout << "Je suis A" << std::endl; }
};
class B : public A
{
protected:
void f() const override {
A::f();
std::cout << "Je suis B" << std::endl;
}
void fa(const A& a) { a.f(); }
public:
void call_f() { f(); }
};
int main()
{
B b;
b.call_f();
b.fa();
return 0;
} |
Ce code ne compile pas (avec VS 2005) et l'erreur indique :
1>.\main.cpp(21) : error C2248: 'A::f' : impossible d'accéder à protected membre déclaré(e) dans la classe 'A'
La ligne 21 correspond à la ligne void fa(const A& a) { a.f(); }
Je ne comprends pas pourquoi je ne peux pas appeler une méthode protected d'une instance de la classe A dans une méthode de la classe B alors que B dérive de A. Merci de m'indiquer mon erreur, je sèche... :calim2:
Le Mérovingien