虚拟方法重定向错误
Bad redirection with virtual method
我有 2 个类 A 和 B,其中 B 继承自 A.在 A 内部,我有这个方法virtual int save(X *) const =0
。在 B 内部,我希望这种方法virtual int save(Y *) const
我还有类 X 和 Y,其中 Y 继承自 X。
但是编译器说我不能做一个B的实例,因为它是抽象的。为什么这不起作用?编译器看不到 Y 是从 X 继承的?
函数的类型签名需要匹配。重写此类函数时,不能在参数中使用多态性。就编译器而言,现在B
有两种方法,virtual int save(X *) const =0
和virtual int save(Y *) const
(其中第二种隐藏了第一种方法)。由于函数签名不匹配,因此第二个签名实际上并没有覆盖它;它只是隐藏它。
A
中的抽象方法可以接受任何X
指针。如果你想覆盖它,你必须接受原始方法所做的一切。仅处理指向Y
的指针的方法不会这样做。
相关文章:
- 如何将stdout重定向到stderr
- 编写时C++中的输入重定向问题
- 获取通过重定向传入的输入文件的名称?
- C++:错误重定义和先前声明
- Windows C++重定向库
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 写入文件 a.txt,而终端重定向到文件 b.txt
- 使用 dup2() 进行输入重定向
- 将 clangd stderr 重定向到文件而不是控制台
- 分段错误(核心转储) 重定向输入
- 将 c++ 程序语法错误重定向到窗口中的文件
- 重定向std:cout到std::ofstream,得到一个错误
- 将第三方模块的控制台输出/错误重定向到日志文件
- 将CGI中的错误消息重定向到Apache日志文件
- 虚拟方法重定向错误
- 这是重定向fork和execvp派生的子级的输出的错误方法吗
- 阻塞流重定向的分段错误
- 在ubuntu中使用/bin/bash运行grep时出现错误重定向
- 在c# GUI项目上重定向标准输出+标准错误
- 即使重定向了标准输出和标准错误,Unix程序如何在屏幕上显示输出?