dérivée Disons que j'ai la hiérarchie de classe suivante:Friendness et classe
class Base
{
protected:
virtual void foo() = 0;
friend class Other;
};
class Derived : public Base
{
protected:
void foo() { /* Some implementation */ };
};
class Other
{
public:
void bar()
{
Derived* a = new Derived();
a->foo(); // Compiler error: foo() is protected within this context
};
};
Je suppose que je pourrais changer trop a->Base::foo()
mais depuis foo()
est virtuelle pure dans la classe Base
, l'appel se traduira par l'appel Derived::foo()
de toute façon .
Cependant, le compilateur semble refuser a->foo()
. Je suppose que c'est logique, mais je ne peux pas vraiment comprendre pourquoi. Est-ce que je manque quelque chose? Ne peut pas (ne devrait pas) gérer ce cas particulier?
Merci.
En fait, quand je spécifie 'a-> Base :: foo()' le compilateur semble correct avec lui. Es-tu sûr de ça ? – ereOn
Êtes-vous allé jusqu'au bout de la liaison? L'éditeur de liens doit se plaindre d'une référence indéfinie à la méthode 'Base :: foo'. –
Je n'étais pas à l'étape de la liaison, vous avez raison. Merci pour la méthode alternative/plus correcte. – ereOn