不能实例化抽象类“错误的解决办法
2018-01-20 16:07
274 查看
这篇文章讲解一个编程中遇到一个错误,那就是提示”不能实例化抽象类的错误“,在输出窗口有如下的错误提示信息,如下图:
根据具体情况不同,可能涉及到的类也可能不同,但是道理是一样的,之所以出现这样的错误呢,其实是因为,你继承的类的抽象方法没有在继承类中进行重写,比如在这里,我从CView类继承了一个类CTrlee类,但是我没有重写OnDraw函数,然后就进行了对CTrlee类的使用,如下:
那么现在我将OnDraw函数补上,并在源文件中进行定义,在头文件中,我去掉注释,是OnDraw生效,如下图:
在源文件中我进行定义,如下图:
现在我再编译,就可以了,并且正常运行,如下:
这里只是为了说明这么一个道理,在实际的mfc变成过程中,我们使用mfc类向导添加的类的时候,会自动为我们添加基类的抽象函数(虚函数),并定义。只是有的时候我们手动修改代码的时候,可能会遇到这样的问题,比如,如下图,通过使用类向导生成的类的头文件中,是这样的,如下图:
我们可以看见有个部分叫重写,就是用于重写基类的虚函数,但是为什么同样是继承与CView,这里除了OnDraw还有别的虚函数,刚才我们那个类中没有重写啊,其实因为这几个虚函数在CView基类进行了定义。而OnDraw是一个纯虚函数,只有声明,没有定义。在重写虚函数的时候,一定要记住,那就是函数的函数名以及参数,返回类型等要和被重写的函数完全一致。否则就不能完成重写任务,仍然会有上面的错误出现。
根据具体情况不同,可能涉及到的类也可能不同,但是道理是一样的,之所以出现这样的错误呢,其实是因为,你继承的类的抽象方法没有在继承类中进行重写,比如在这里,我从CView类继承了一个类CTrlee类,但是我没有重写OnDraw函数,然后就进行了对CTrlee类的使用,如下:
那么现在我将OnDraw函数补上,并在源文件中进行定义,在头文件中,我去掉注释,是OnDraw生效,如下图:
在源文件中我进行定义,如下图:
现在我再编译,就可以了,并且正常运行,如下:
这里只是为了说明这么一个道理,在实际的mfc变成过程中,我们使用mfc类向导添加的类的时候,会自动为我们添加基类的抽象函数(虚函数),并定义。只是有的时候我们手动修改代码的时候,可能会遇到这样的问题,比如,如下图,通过使用类向导生成的类的头文件中,是这样的,如下图:
我们可以看见有个部分叫重写,就是用于重写基类的虚函数,但是为什么同样是继承与CView,这里除了OnDraw还有别的虚函数,刚才我们那个类中没有重写啊,其实因为这几个虚函数在CView基类进行了定义。而OnDraw是一个纯虚函数,只有声明,没有定义。在重写虚函数的时候,一定要记住,那就是函数的函数名以及参数,返回类型等要和被重写的函数完全一致。否则就不能完成重写任务,仍然会有上面的错误出现。
关于C++ 不能实例化抽象类:
例:
#include <iostream.h> class Base{ public:virtual void fun()=0; } ; class Test:public Base{ public:virtual void fun(){cout<<"Test.fun="<<endl;} } ; void main(){ Base a; Test *p;p=&a; }
void main(){ Base a;//这句是错误的, 因为抽象类不能被实例化 Test *p;p=&a;//这句也是错误的, 不能把基类的地址赋给派生类的指针。 } 应改正为 void main(){ Base *a; Test p;a=&p; }
相关文章推荐
- 关于“不能实例化抽象类“错误的解决办法
- 关于“不能实例化抽象类“错误的解决办法
- 更改计算机名称后 导致 sql server 2008 R2 用windows账户不能附加的错误解决办法
- 系统提示SVCHOST错误,该内存不能为“read”解决办法
- 错误 1 error C2259: “LinearList<T>”: 不能实例化抽象类 e:\datastructure\cap_1\cap_1\linearlist.h
- 对于错误“不能确定应用到此机器的组策略安全性设置”的解决办法
- SSIS报不能把DBNull convert成其他类型,Object等错误的解决办法
- win10提示关键错误cortana不能用的解决办法
- Windows不能再本机启动SQL Server(MSSQLSERVER)错误代码126解决办法
- 远程桌面不能连接,出现awgina.dll取代错误的解决办法
- 关于"Ueditor 请求后台配置项http错误,上传功能将不能正常使用"的解决办法
- ls command not found,vim都不能使用,环境变量配置错误 的解决办法
- mindmanagerR6025或者不能打开mmap文件错误解决办法
- 出现“不能执行已释放的Script代码”错误的原因及解决办法
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法
- 关于【finder不能完成该操作 因为未能读取或写入"文件名"中的某些数据(错误代码-36)】快速解决办法
- SSIS报不能把DBNull convert成其他类型,Object等错误的解决办法
- IIS8.5关于“ 配置错误 不能在此路径中使用此配置节”的解决办法
- tomcat5.5不能打印启动的错误信息的解决办法
- 关于出现错误:_tkinter.TclError: couldn't open "E:\Python系列\Python程序\Python安装.gif"tkinter中不能打开GIF格式图片的解决办法