Член является неоднозначной ошибкой в ​​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;
Другие вопросы по тегам