我有一个继承问题:
假设我有

class Time{
protected:
void foo();
};

并且
class Base: private Time{
void foo1(){ foo(); }
};

class Child: public Base, private Time{
void foo2(){ foo(); }// here my compiler says that foo is ambiguous
};

如果Base中Time的继承是私有(private)的,为什么foo()不明确?

PS。
对于需要查看完整代码的人员,Just&only就是GitHub项目:
https://github.com/huntekah/Interior_decorator-OpenGL_Project/blob/master/Grafika-OpenGL/Interior_decorator/Display.cpp#L133
Time(实用程序目录)类由ControlObjects和ControlCamera继承,它们都是Controls的基础。显示继承Controls和Time。注释行显示了SetDeltaTime()不明确的地方;

最佳答案

您的代码中还有另一个错误:类库是从类Time私有(private)继承的,而子类是从类time私有(private)继承的!

继承法则:

class Time
{};

class Base : private Time
{};

class Child : public Base, private Time
{};

Base具有Time类的副本,因为它是从Time类继承的。

child具有Base类的副本,因为它是从Base继承的。

***子级为Time的副本,因为其父级(基本)为Time。

如果Child试图从类Time中显式继承,则将发出编译时错误:错误C2584:'Child':直接基础'Time'无法访问;已经是“基础”的基础

关于c++ - C++继承-模糊函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39378897/

10-16 19:14