根据下图,我编写了我的代码.

这是我写的代码:
#include<iostream>
#include<string>
using namespace std;
class person
{
private:
int code;
string name;
public:
void setCode(int c) { code=c; }
int getCode() { return code; }
void setName(string s) { name=s; }
string getName() { return name; }
};
class account : public person
{
private:
double pay;
public:
void setPay(double p) { pay=p; }
double getPay() { return pay; }
};
class admin : public person
{
private:
string experience;
public:
void setExper(string e) { experience=e; }
string getExper() { return experience; }
};
class master : public account, public admin
{
};
int main()
{
master mastObj;// create master object.
mastObj.setName("John");
system("pause");//to pause console screen, remove it if u r in linux
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器显示以下错误:
Error 1 error C2385: ambiguous access of 'setName'
Error 2 error C3861: 'setName': identifier not found
Error 3 IntelliSense: "master::setName" is ambiguous
Run Code Online (Sandbox Code Playgroud)
当您使用多重继承时,它是C++ 中Diamond问题的典型示例.
解决方案是:虚拟继承
也就是说,你应该这样做:
class account : public virtual person
{ //^^^^^^^note this
//code
};
class admin : public virtual person
{ //^^^^^^^note this
//code
};
Run Code Online (Sandbox Code Playgroud)
我刚在这个网站上找到了很好的帖子,所以我会在这里重定向你的答案:
这也意味着,这个话题应该投票结束.