Благодаря компоновке библиотеки третьей стороной, у меня есть что-то вроде следующего кода:Как вызвать статический метод из частного базового класса?
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;
}
Я получаю ошибку компилятора C2247 с MSVC:
Base :: SomeStaticMethod не доступен потому что Derived1 использует private для наследования с Base.
Я знаю, что я не могу получить доступ к Base
членов из Derived2
через наследование из частного спецификатора, но я все еще должен быть в состоянии вызвать статический метод Base
- независимо от каких-либо отношений наследования между Base
и Derived2
.
Как устранить двусмысленность и сообщить компилятору, я просто звоню статическому методу?
Это не работает (такая же ошибка C2247). Я использую MSVC 2013, если это актуально. – Carlton
Вы уверены? Он должен работать? Вы пишете ведущий '::'? – Bathsheba
Положительный. Я скопировал/вставил ваш код и очистил/перестроил мой проект. – Carlton