Article ID: 125749
Article Last Modified on 11/16/2007
APPLIES TO
- Microsoft Visual C++ 2005 Express Edition
- Microsoft Visual C++ .NET 2003 Standard Edition
- Microsoft Visual C++ .NET 2002 Standard Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft Visual C++ 5.0 Professional Edition
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 4.2 Professional Edition
- Microsoft Visual C++ 4.1 Subscription
- Microsoft Visual C++ 4.0 Standard Edition
- Microsoft Visual C++ 2.1
- Microsoft Visual C++ 2.0 Professional Edition
- Microsoft Visual C++ 1.52 Professional Edition
- Microsoft Visual C++ 1.51
- Microsoft Visual C++ 1.5 Professional Edition
- Microsoft Visual C++ 1.0 Professional Edition
This article was previously published under Q125749
SUMMARY
This article discusses an issue that may occur when you are developing a program. If you are still experiencing a problem that resembles the one that this article describes, it may be a different problem. To search for issues related to a specific problem, please include the product name in your search in order to narrow your results. To troubleshoot similar problems, please see the "Similar problems and resolutions" section later in this article.
SYMPTOMS
The C++ program fails and reports the following run-time
error:
runtime error R6025
- pure virtual function
call
CAUSE
This error occurs when your application indirectly calls a
pure virtual member function in a context where a call to the function is not
valid. In most cases, the compiler detects this and reports the error when
building the application. But depending on how your code is written, sometimes
the problem is detected only at run-time.
The error occurs when you
indirectly call a pure virtual function within the context of a call to the
constructor or destructor of an abstract base class. This is illustrated in the
sample code below, along with some more description.
RESOLUTION
Calling a pure virtual function is a programming error, so
you need to find the call to the pure virtual function and rewrite the code so
it is not called.
One way to find a call to a pure virtual function
is to replace the pure virtual function with an implementation that calls the
Windows API function DebugBreak. When using the debugger, DebugBreak will
cause a hard-coded breakpoint. When the code stops running at this breakpoint,
you can view the callstack to see where the function was called.
Another way to find a call to a pure virtual function is to set a breakpoint on the _purecall function that is found in PureVirt.c. Breaking on this function has the advantage of keeping the stack intact so that you can trace what is occurring.
STATUS
This behavior is by
design.
Additional query words: 8.00 8.00c 9.00
Keywords: kbresolve kbtshoot kbcompiler kbcpponly kberrmsg kbprb KB125749