答えはここにあります:
URL投稿者: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
2 つのどちらかを選択する必要があるようですが、選択したくありません。ここで何が起こっているのでしょうか。
よろしく、ジョン
編集:いくつかのコードを追加しました。そこで仮想関数を呼び出すので、エランは正しいようです
編集: 例に追加 [ virtual void OnLostDevice() = 0; ]。アブストラクトから ascoop に変更すると、すぐに解決策が得られました。私はまだそこにいないと感じたので、下のコメントでそのページを読み始めました.
編集:答えを得た後、私は自分の問題を理解しました。だから私は質問を書き直したので、答えは質問に合っています。
ありがとう、ジョン