我有四个课程(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。