E2247 'membre' n'est pas accessible (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Erreurs et avertissements du compilateur (C++) - Index

Vous tentez de référencer le membre de classe C++ 'membre', mais il est privé ou protégé et ne peut être référencé depuis cette fonction.

Ceci se produit parfois lorsque vous tentez d'appeler une fonction membre surchargée accessible (ou un constructeur), alors que les arguments correspondent à une fonction inaccessible.

La résolution surchargée est toujours vérifiée avant l'accessibilité.

Si cela pose problème, tentez un transtypage explicite d'un ou de plusieurs paramètres pour sélectionner la fonction accessible désirée.

Les constructeurs de classes de base virtuelles doivent être accessibles dans la portée de la classe la plus dérivée. Ceci s'explique par le fait que C++ construit toujours les classes de base virtuelles en premier, quelle que soit leur place dans la hiérarchie. Par exemple :



 class A {
 public:
    A();
 };
 class B : private virtual A {};
 class C : private B {
 public:
 C();
 };
 C::C() {} // erreur, A::A() n'est pas inaccessible



Etant donné que A est privé pour B, qui est privé pour C, le constructeur de A est inaccessible à C. Cependant, le constructeur de C doit pouvoir appeler les constructeurs de sa classe de base virtuelle, A. Si B hérite publiquement de A, l'exemple ci-dessus se compilera.