c++ - 请帮我看看为什么我会出错?
问题描述
我无法弄清楚为什么Derived
在覆盖 function 之后类仍然是 Abstract fun()
。
这是错误消息:
error: invalid new-expression of abstract class type 'Derived' Base *t = new Derived(a);
error: no matching function for call to 'Base::fun(int&)'int i = t->fun(b);
#include <iostream>
using namespace std;
class Base
{
protected:
int s;
public:
Base(int i = 0) : s(i) {}
virtual ~Base() {}
virtual int fun() = 0;
};
class Derived: public Base
{
public:
Derived(int i) : Base(i) {}
~Derived() { cout << --s << " "; }
int fun(int x) { return s * x; }
};
class Wrapper
{
public:
void fun(int a, int b)
{
Base *t = new Derived(a);
int i = t->fun(b);
cout << i << " ";
delete t;
}
};
int main()
{
int i, j;
cin >> i >> j;
Wrapper w;
w.fun(i, j);
return 0;
}
解决方案
该函数在基类和派生类之间有两个不同的签名
virtual int fun() = 0;
但是派生类
int fun(int x) { return s * x; }
如果你要添加override
它会提醒你这个错误
int fun(int x) override { return s * x; }
推荐阅读
- r - R:文件名列表结果无法识别实际读取文件(文件名字符编码问题)
- html - 更改相对 div 中绝对按钮的顺序
- pandas - Pandas Dataframe:将列拆分为多列
- python - 在 TCP recv() 中只接收 4 kb
- php - HTML5 响应式一页站点,url 中带有 php 变量
- ionic-framework - 离子电容器文件系统文件存在
- angular - Angular Service Worker 不适用于导航 URL(离线模式)
- javascript - 我的 ES6 导入是从索引文件还是直接从导出文件读取?
- ios - 快速获取待处理本地通知的剩余时间的问题
- c# - c# version 8 Target-typed new-expressions error requires (), [], or {} after type