成员在C ++中存在模糊错误

时间:2014-07-31 16:29:51

标签: c++ c++98

我使用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;是继承还是不继承(由班长)。

3 个答案:

答案 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;