首页 > 解决方案 > (公共)派生类的成员函数无法从 main 访问

问题描述

我有四个课程(C++ 中的经典钻石问题)。我们称祖父类 A、父类 B 和 C 以及子类 D。B 和 C 都有一个名为 的公共成员函数attack。我想让 D 使用 B 的attack功能。D类看起来像这样:

class D : public B, public C
{
    using   B::attack;

    public:
        D(void);
        D(std::string &name);
        D(D &instance);
        ~D(void);

        D&      operator=(D &instance);

};

攻击函数只是在标准输出上显示一条消息。我的主要看起来像这样:

int     main(void)
{
    DiamondTrap dt;
    dt.attack();
}

我得到的错误如下:

error: 'attack' is a private member of 'D'

note: implicitly declared private here
        using   B::attack;

这是否意味着使用using关键字使成员函数私有?我不知道为什么attack现在是私人的。我可以attack在我的主函数中从 B 的实例调用它,但不能从 D 的实例调用它。我希望从 D 的实例调用它。我该如何解决这个问题?

注意我不知道这是否与我的问题有关,但是 B 和 C 的继承是虚拟的,所以在创建 D 的实例时只创建 A 的一个实例。另外,我不允许friend在我的解决方案中使用关键字,我只能使用 C++98。

标签: c++inheritanceprivatemultiple-inheritancevirtual-inheritance

解决方案


推荐阅读