我使用Borland C ++ 4.5,因为我的学校推荐它。当我尝试运行此代码时,在尝试运行代码时出现三个错误。我每次都尝试更改访问说明符,但是我失败了。
#include "iomanip.h"
#include "iostream.h"
#include <conio.h>
#include <stdio.h>
class person
{
public : int code;
char name[50];
void PEnter()
{
cout << "\nEnter Code :\n";
cin >> code;
cout << "\nEnter Name :\n";
gets(name);
}
};
class account : public person
{
public : float pay;
void AcEnter()
{
cout << "\nEnter Pay :\n";
cin >> pay;
}
};
class admin : public person
{
public : int experience;
void AdEnter()
{
cout << "\nEnter Experience :\n";
cin >> experience;
}
};
class master : public account , admin
{
public : void MEnter()
{
PEnter();
AcEnter();
AdEnter();
}
void MRet()
{
cout << setw(20) << name << "\t" << setw(7) << code << "\t" << setw(6) << pay << "\t" << setw(3) << experience << "\n";
}
};
void main()
{
clrscr();
master M[200];
int i = 0;
char ch;
do
{
M[i].MEnter();
++i;
cout << "\nEnter More :\n";
cin >> ch;
}
while (ch == 'Y' || ch == 'y');
int j = i;
clrscr();
cout << setw(20) << "Name\t" << setw(7) << "Code\t" << setw(6) << "Pay\t" << setw(3) << "\tExperience\n";
for (i = 0 ; i <= j ; ++i)
{
M[i].MRet();
}
getch();
}
这是我得到的三个错误:
Error NONAME00.CPP 43 : Member is ambiguous 'person::PEnter' and 'person::PEnter' in function master::MEnter()
Error NONAME00.CPP 49 : Member is ambiguous 'person::name' and 'person::name' in function master::MRet()
Error NONAME00.CPP 49 : Member is ambiguous 'person::code' and 'person::code' in function master::MRet()
我不知道该班的人是否&#39;是继承还是不继承(由班长)。
答案 0 :(得分:4)
您遇到了diamond inheritance
问题。它是什么以及如何解决它在这里描述的virtual inheritance注意wiki示例中的继承与你的非常接近,所以你应该没有任何问题来遵循那里提供的解决方案
答案 1 :(得分:0)
也可以将基类继承为虚拟
class admin : public virtual person
class account : public virtual person
答案 2 :(得分:-1)
将fn称为
person::PEnter();
输入这样的值 -
person::name;
person::code;