E2247 Zugriff auf 'element' nicht möglich (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Compiler-Fehler und -Warnungen (C++) - Index

Sie versuchen, auf ein Element einer C++ Klasse zuzugreifen, das private oder protected und aus dieser Funktion heraus nicht zugänglich ist.

Dies geschieht manchmal, wenn eine zugängliche überladene Funktion (oder ein Konstruktor) angesprochen werden soll und die Argumente zu einer unzugänglichen Funktion passen.

Mögliches Überladen wird immer vor den Zugriffsrechten geprüft.

Nehmen Sie eine explizite Typumwandlung bei einem oder mehreren Parametern vor, um den richtigen Zugriff zu ermöglichen.

Konstruktoren von virtuellen Basisklassen müssen von den abgeleiteten Klassen erreichbar sein, da C++ immer zuerst die virtuellen Basisklassen erstellt, und zwar unabhängig von ihrer Position in der Klassenhierarchie. Ein Beispiel:



 class A {
 public:
    A();
 };
 class B : private virtual A {};
 class C : private B {
 public:
 C();
 };
 C::C() {} // Fehler, A::A() ist nicht zugänglich



Da B von A und C von B private abgeleitet wird, ist der Konstruktor von A für C nicht erreichbar. Jedoch muss der Konstruktor von C die Möglichkeit haben, auf den Konstruktor der virtuellen Basisklasse A zuzugreifen. Verwendet man stattdessen eine public-Vererbung von A nach B, dann funktioniert obiges Beispiel.