c++ - (公共)派生类的成员函数无法从 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。
解决方案
推荐阅读
- java - 如何在输入流上跳过损坏的 ZipEntry
- java - Firestore 客户端即使在导入时也会引发依赖项不匹配
- ios - 如何使用 ios 中的 Web 应用服务从 Azure SQL 数据库中获取表数据?
- angular - 浏览器和邮递员的 Cookie 到期时间不同
- facebook - 指向我的重定向页面的 Facebook 链接在桌面上打开到错误 404 页面,但不是在移动设备上
- r - 模拟事件发生次数的函数
- python-3.x - 时间和音量预测
- django - 有没有办法使用 Django 注册模板注册新用户,这会阻止他们在管理员手动审核之前登录?
- python - 每当尝试创建新目录时,python 的 azure 函数都会出错
- webpack - Webpack 4 中的自定义 terser-webpack-plugin 缓存失效