Член является неоднозначной ошибкой в C++
Я использую 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()
Я не знаю, наследуется ли класс "персона" или нет (учителем класса).
3 ответа
Вы попали в diamond inheritance
проблема. Что это такое и как ее решить, описано здесь. Виртуальное наследование. Наследование примечаний в вики-примере очень близко к вашему, поэтому не должно возникнуть никаких проблем с тем, чтобы вы следовали предоставленному там решению.
Также можно унаследовать базовый класс как виртуальный.
class admin : public virtual person
class account : public virtual person
Называть фн как
person::PEnter();
введите значение как это -
person::name;
person::code;