C++通过链接列表派生类访问

C++通过链接列表派生类访问,c++,class,C++,Class,我正在尝试编写一个程序,它有一个基类Employee和两个派生类Staff和Manager。 我将数据存储在一个链表中 在尝试访问Manager的功能时,我遇到了问题,因为我认为这是向下投射? 当从节点的链表接收数据时,它假定其类型为Employee,而我需要它的类型为Manager才能访问私有函数。 我试图向上投射它,但是它不喜欢我使用变量的方式 有人知道如何解决这个问题并允许访问我的派生类中的函数吗? 请注意,我是个新手,所以如果我犯了一个明显的错误,请记住这一点 void displayM

我正在尝试编写一个程序,它有一个基类Employee和两个派生类Staff和Manager。 我将数据存储在一个链表中

在尝试访问Manager的功能时,我遇到了问题,因为我认为这是向下投射? 当从节点的链表接收数据时,它假定其类型为Employee,而我需要它的类型为Manager才能访问私有函数。 我试图向上投射它,但是它不喜欢我使用变量的方式

有人知道如何解决这个问题并允许访问我的派生类中的函数吗? 请注意,我是个新手,所以如果我犯了一个明显的错误,请记住这一点

void displayManagerDetails(const List<Employee*> list)
{
    unsigned long longID = getID();
    List<Employee*> temp(list);
    system("CLS");
    cout << "Name         Department      Salary\n";
    cout << "--------------------------------------------------------\n\n";
    while (!temp.isEmpty())
    {
        if (temp.first().data->getEmpNo() == longID && temp.first().data->getType() == "Manager")
        {       
            Manager hold = temp.first();
            Employee* pEmp = &hold;
            Manager* test = dynamic_cast<Manager*>(pEmp);

            cout << test->getSalary()


            return;
        }
        temp.deleteFirst();
    }
}

如果您需要进一步的代码,请让我知道,但我认为这是所有相关的:

您似乎根据代码中的其他用法错误地从链接列表中提取指针。尝试:

Manager * test = dynamic_cast< Manager * >( temp.first().data );

您可能希望使用类似的方法来正确处理您的用例。那么您的问题是什么?如果它是一个私有函数,您希望如何在类之外进行访问?您不能在为其定义的类之外访问私有方法。我不确定你的列表或你的类是什么定义的,你应该给出相关的信息。但根据上下文线索,Manager hold=temp.first似乎不正确。为什么不使用Manager*测试=动态\u casttemp.first.data;