C++自己写的虚基类和同名函数多重继承的小例子出现了继承不明确的问题

#include

using namespace std;

class vihicle
{
public:
int i;
virtual void run()
{
cout<<"111";
}
};
class bicycle:virtual public vihicle
{
public:
void run()
{
cout<<"bicycle run";
}

};

class motorcar:virtual public vihicle
{
public:
void run()
{
cout<<"motorcar run";
}

};

class mb:public bicycle
{
public:
virtual void run1(){}
void run()
{
run1();
}
};

class mm:public motorcar
{
public:
virtual void run2(){}
void run()
{
run2();
}
};
class motorbicycle:public mb,public mm
{
public:
void run1()
{
cout<<"8888";
}
void run2()
{
cout<<"7777";
}
};

int main()
{
motorbicycle d1;
bicycle a1;
vihicle *b2=&a1;
vihicle *b3=&d1;
bicycle *pB1=&d1;
motorcar *pB2=&d1;
b3->run();
b2->run();
pB1->run();
pB2->run();
cout<<d1.i;

while (1)
{
}
return 0;

}图片说明

#if 1
#include
using namespace std;

class vihicle
{
public:
int i;
virtual void run()
{
cout<<"111";
}
};
class bicycle:virtual public vihicle
{
public:
void run()
{
cout<<"bicycle run";
}
};
class motorcar:virtual public vihicle
{
public:
void run()
{
cout<<"motorcar run";
}
};
class mb:public bicycle
{
public:
virtual void run1(){}
void run()
{
run1();
}
};
class mm: public motorcar
{
public:
virtual void run2(){}
void run()
{
run2();
}
};
class motorbicycle: public mb, public mm
{
public:
//void run(){}
void run1()
{
cout<<"8888";
}
void run2()
{
cout<<"7777";
}
};
int main()
{
motorbicycle d1;
bicycle a1;
vihicle *b2=&a1;
vihicle *b3=&d1;
bicycle *pB1=&d1;
motorcar *pB2=&d1;
b3->run();
b2->run();
pB1->run();
pB2->run();
cout<<d1.i;
}
#endif

注意我双斜杠注释的那一行,语法是没有错,但是代码逻辑是错的,你想要同时继承两个类,没有问题,但是编译器并不知道你想要继承哪一个run()
方法。因为你的 bicycle类和你的motorcar类已经将父类的run()方法给覆盖掉了,那就是说你的 motorbicycle类必须得覆盖以上两个类中的run()方法
否则,编译器怎么能够知道,该继承哪个呢? 当然,以上注释是一种解决方案,还有一种就是,在你的 bicycle类和你的motorcar类中不要定义run()
方法,这样的话就可以过去了,当然,请根据你当下的需求来,还有就是你好像不理解虚拟继承的本质,好好补补基础...

目测 这个子类motorbicycle 没有继承 最顶端 vihicle 下的 virtual void run()

基类vihicle 下的 virtual void run(),必须在派生类中进行定义。
在派生类motorbicycle中重新定义 void run(){}; 即可。

错误原因是:motorbicycle从mm和mb各继承了一个run().
存在二义性,必须明确,所以一个解决办法是自己定义一个。