去谷歌搜尋一下錯誤代碼出現的訊息
徵狀
C + + 程式將會失敗,並且會報告下列的執行階段錯誤:
執行階段錯誤 R6025
-純虛擬函式呼叫
原因
當您的應用程式間接呼叫純虛擬成員函式在內容中呼叫的函式不正確,就會發生此錯誤。在大部分的情況下,編譯器會偵測出這,並建置應用程式時報告錯誤。但是,根據寫入您的程式碼的方式,有時候偵測到問題只會在執行階段。
當您間接呼叫建構函式呼叫的內容或抽象基底類別的解構函式內的純虛擬函式時,就會發生錯誤。範例將下列程式碼,以及一些更多說明] 所示。
解決方案
呼叫純虛擬函式是程式設計錯誤,所以您必須尋找純虛擬函式的呼叫,並將程式碼的撰寫,因此它不會呼叫。
若要尋找純虛擬函式呼叫的方法之一是以取代純虛擬函式呼叫 Windows API 函式DebugBreak的實作。使用偵錯工具, DebugBreak會硬式編碼的中斷點。當程式碼停止此中斷點在執行時,您可以檢視以查看呼叫函數的呼叫堆疊。
若要尋找純虛擬函式呼叫的另一個方法是位於 PureVirt.c 的_purecall函式上設定中斷點。在這個函式上的中斷的優點是能夠保持堆疊不變,如此您就可以追蹤發生了什麼狀況。
狀態
此行為是系統設計的一部份。
更多的資訊
如需詳細資訊,請參閱下列的 Microsoft 開發人員網路 (MSDN) 網站的 「 組建錯誤 」 一節的"C 執行階段錯誤 R6002 到 R6025 」 頁面:
技術
http://msdn2.microsoft.com/en-us/library/aa277044 (VS.60).aspx
注意R6025 錯誤並未記載在的任何手冊或線上說明隨附 Visual C++,版本 2.x 或位於其下。不過,它會簡短討論在第 3 篇 Visual C++ 2.0 版所隨附的 Readme.wri 檔案。
範例程式碼
/* Compile options needed: none
*/
class A;
void fcn( A* );
class A
{
public:
virtual void f() = 0;
A() { fcn( this ); }
};
class B : A
{
void f() { }
};
void fcn( A* p )
{
p->f();
}
// The declaration below invokes class B's constructor, which
// first calls class A's constructor, which calls fcn. Then
// fcn calls A::f, which is a pure virtual function, and
// this causes the run-time error. B has not been constructed
// at this point, so the B::f cannot be called. You would not
// want it to be called because it could depend on something
// in B that has not been initialized yet.
B b;
void main()
{
}