Aufgrund des Layouts einer Bibliothek von Drittanbietern, habe ich so etwas wie den folgenden Code:So rufen Sie eine statische Methode von einer privaten Basisklasse auf?
struct Base
{
static void SomeStaticMethod(){}
};
struct Derived1: private Base {};
struct Derived2: public Derived1 {
void SomeInstanceMethod(){
Base::SomeStaticMethod();
}
};
int main() {
Derived2 d2;
d2.SomeInstanceMethod();
return 0;
}
Ich C2247 immer Compiler-Fehler mit MSVC:
Basis :: SomeStaticMethod nicht zugänglich Weil Derived1 private verwendet, um von Base zu erben.
Ich weiß, dass ich nicht Base
Mitglieder aus Derived2
über Vererbung wegen des privaten Spezifizierer zugreifen können, aber ich sollte noch eine statische Methode von Base
aufrufen können, - unabhängig von einer Vererbungsbeziehung zwischen Base
und Derived2
.
Wie kann ich die Mehrdeutigkeit auflösen und dem Compiler mitteilen, dass ich gerade eine statische Methode aufruft?
Dies funktioniert nicht (gleicher Fehler C2247). Ich verwende MSVC 2013, wenn das relevant ist. – Carlton
Sind Sie sicher? Es sollte funktionieren? Hast du das führende '::' geschrieben? – Bathsheba
Positiv. Ich habe Ihren Code kopiert/eingefügt und mein Projekt gereinigt/neu erstellt. – Carlton