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

这是我写的代码:
#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;
}编译器显示了以下错误:
Error 1 error C2385: ambiguous access of 'setName'
Error 2 error C3861: 'setName': identifier not found
Error 3 IntelliSense: "master::setName" is ambiguous发布于 2011-12-01 19:22:53
你需要虚拟继承:
class account: public virtual person{
....
}
class admin: public virtual person{
...
}PS和您的支付、代码字段缺少初始化!这可能会导致令人难堪的错误(比如向清洁工支付数百万美元:):
#include<iostream>
#include<string>
using namespace std;
class person
{
// ...
person() : code(0), name("anonymous") {}
};
class account : public virtual person
{
// ...
account() : pay(0) {}
};
class admin : public virtual person
{
// ...
admin() : experience("unknown") {}
};发布于 2011-12-01 19:22:46
当您使用多重继承时,这是C++中Diamond Problem的经典示例。
解决方案是:Virtual inheritance
也就是说,您应该这样做:
class account : public virtual person
{ //^^^^^^^note this
//code
};
class admin : public virtual person
{ //^^^^^^^note this
//code
};我刚刚在这个网站上找到了非常好的帖子,所以我会把你重定向到这里的答案:
这也意味着,这个话题应该投票关闭。
发布于 2020-09-08 19:56:38
您可以使用mastObj.master::admin::person::setName("John");
https://stackoverflow.com/questions/8340516
复制相似问题