C++ R6025纯虚拟函数调用:是什么以及如何解决
可以在这里找到答案: url发布人: 请阅读这一页,以便你理解为什么会发生这种情况。你也知道为什么吗C++ R6025纯虚拟函数调用:是什么以及如何解决,c++,visual-c++,pure-virtual,C++,Visual C++,Pure Virtual,可以在这里找到答案: url发布人: 请阅读这一页,以便你理解为什么会发生这种情况。你也知道为什么吗 virtual void OnRelease() = 0; 作者: 会起作用,但不是解决问题的正确方法 原始问题 R6025:纯虚拟函数调用 #include <Windows.h> // static lib //file.h class cBaseApplication { public: virtu
virtual void OnRelease() = 0;
作者:
会起作用,但不是解决问题的正确方法
原始问题 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;
}
R6025发生,移除时,除内存泄漏外,其他所有泄漏都会发生。
删除R6025的指针引用也将在“程序退出”时发生,此时应用程序将被销毁
由于嘟嘟声,R6025吓了我一跳:s
似乎我必须在两者之间做出选择,但我只是不想,这里发生了什么
问候,,
约翰
编辑:添加了一些代码,看起来Eran是正确的,因为我确实在那里调用了虚拟函数
编辑:添加到示例中,[virtual void OnLostDevice()=0;]。从抽象到ascoop的转变立即给出了解决方案。开始阅读下面评论中的那一页,因为我感觉自己还没到那里
编辑:得到答案后,我明白了自己的问题。所以我重写了这个问题,所以答案符合这个问题
谢谢,John,您不能在构造函数中调用虚函数,也不能在析构函数中调用虚函数。我在这里没有看到纯虚拟函数,但是如果
cBaseApplication::Release
碰巧调用了一个函数,那么每次销毁cBaseApplication
时都会出现该错误。我不确定这是否是问题所在,因为我没有所有的代码,但您的代码会引发此类问题。您不能在构造函数和析构函数中调用虚函数。我在这里没有看到纯虚拟函数,但是如果cBaseApplication::Release
碰巧调用了一个函数,那么每次销毁cBaseApplication
时都会出现该错误。我不确定这是否是问题所在,因为我没有所有的代码,但您的代码会调用此类问题。R6025:纯虚拟函数调用--在mesagebox@thb它是由MSVC程序打印的。错误是否发生在上面粘贴的小程序中?或者它只发生在其他程序中,而这只是一个片段?没关系,那个程序甚至都不编译。我有我的问题的答案。请提供一个完整的小程序来演示问题。有关更多信息,请参阅。您是否了解基本Release()
将被调用两次?(这是你的意图吗?)R6025:纯虚拟函数调用——在mesagebox@thb它是由MSVC程序打印的。错误是否发生在上面粘贴的小程序中?或者它只发生在其他程序中,而这只是一个片段?没关系,那个程序甚至都不编译。我有我的问题的答案。请提供一个完整的小程序来演示问题。有关更多信息,请参阅。您是否了解基本Release()
将被调用两次?(这是你的意图吗?)你是对的,我确实在析构函数中调用虚函数。临时解决方案,在抽象func上实现了空范围。我正在进一步研究这个答案。我承认这个答案是真的。你是对的,我在析构函数中调用虚函数。临时解决方案,在抽象func上实现了空范围。我正在进一步研究这个答案。我承认这个答案是真的。
#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;