R6025 纯虚函数调用:什么是以及如何解决
R6025 Pure virtual function call: What is and how to resolve
答案可以在这里找到:
摘自《有效C++,第三版》,作者:斯科特·迈耶斯
网址发布者: HMJD
请阅读该页面,以便您了解为什么会发生这种情况。你也知道为什么要替换
virtual void OnRelease() = 0;
由:
virtual void OnRelease(){};
将起作用,但不是正确的解决方法。
原始问题
R6025:纯虚函数调用
#include <Windows.h>
// static lib
//file.h
class cBaseApplication
{
public:
virtual ~cBaseApplication(){ Release(); }
virtual void Release()
{
OnRelease();
};
virtual void OnRelease() = 0;
}; // class cBaseApplication
//file1.h
class cApplication : public cBaseApplication
{
public:
virtual void OnRelease()
{
/* what the heck do something here */
};
}; // class cApplication
// executable
// file3.h
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow )
{
cApplication* pApplication = new cApplication();
/*...what the heck, do stuff...*/
pApplication->Release();
delete pApplication; // R6025: pure virtual function call
pApplication = NULL;
return 0;
}
在生产线上
delete pApplication;
R6025发生,删除时,除内存泄漏外,所有正常情况。删除指针引用 R6025 也会在"程序退出"时发生,当 cApplication 应用程序将被破坏时。
由于哔哔声,R6025吓坏了我:s
看来我必须在两者之间做出选择,但我只是不想,这里发生了什么?
问候John
编辑:添加了一些代码,似乎Eran是对的,因为我在那里调用虚拟函数
编辑:添加到示例中,[ 虚拟无效 OnLostDevice() = 0; ]。从抽象到ascoop的改变给出了一个直接的解决方案。开始在下面的评论中阅读该页面,因为我感觉我还没有到达那里。
编辑:在我得到答案后,我明白了我自己的问题。所以我重写了问题,所以答案适合问题。
谢谢,约翰
不得在构造函数和析构函数中调用虚函数。我在这里没有看到纯虚函数,但是如果cBaseApplication::Release
碰巧调用了一个函数,则每次破坏cBaseApplication
时都会收到该错误。我不确定这是问题所在,因为我没有所有代码,但是您的代码需要此类问题。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?