-->

R6025纯虚函数调用:什么是和如何解决(R6025 Pure virtual function c

2019-09-18 19:34发布

答案可以在这里找到:

从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让我害怕:■

因为它似乎我有两个,但我只是不想之间做出选择,发生了什么吗?

问候,约翰

编辑:添加一些代码,似乎叶兰是正确的,因为我做的调用虚函数有

编辑:添加到例如,[虚拟无效OnLostDevice()= 0; ]。 从抽象到ascoop改变了立即解决。 开始阅读页面下面为我的感觉我现在还没有评论。

编辑:我得到了答案后,我明白我自己的问题。 所以我改写了这个问题,所以回答适合的问题。

谢谢,约翰

Answer 1:

你不能在构造函数析构函数中调用虚函数。 我没有看到一个纯虚函数在这里,但如果cBaseApplication::Release碰巧打电话给妻子,你会在每次破坏时间得到这个错误cBaseApplication 。 我不知道这是个问题,因为我没有所有的代码,但是代码要求的那种问题。



文章来源: R6025 Pure virtual function call: What is and how to resolve