While compiling on GCC I get the error: pure-specifier on function-definition, but not when I compile the same code using VS2005.
class Dummy { //error: pure-specifier on function-definition, VS2005 compiles virtual void Process() = 0 {}; };
But when the definition of this pure virtual function is not inline, it works:
class Dummy { virtual void Process() = 0; }; void Dummy::Process() {} //compiles on both GCC and VS2005
What does the error means? Why cannot I do it inline? Is it legal to evade the compile issue as shown in the second code sample?
[edit] Syntax A pure virtual function is a virtual function whose declarator has the following syntax: declarator virt-specifier(optional) = 0. Here the sequence = 0 is known as pure-specifier, and appears either immediately after the declarator or after the optional virt-specifier ( override or final ).
A pure virtual function is a virtual function in C++ for which we need not to write any function definition and only we have to declare it. It is declared by assigning 0 in the declaration. An abstract class is a class in C++ which have at least one pure virtual function.
A pure virtual function doesn't have the function body and it must end with = 0 . For example, class Shape { public: // creating a pure virtual function virtual void calculateArea() = 0; }; Note: The = 0 syntax doesn't mean we are assigning 0 to the function.
In the constructor of Base class, we can call the pure virtual function using 'this' pointer.
Ok, I've just learned something. A pure virtual function must be declared as follows:
class Abstract { public: virtual void pure_virtual() = 0; };
It may have a body, although it is illegal to include it at the point of declaration. This means that to have a body the pure virtual function must be defined outside the class. Note that even if it has a body, the function must still be overridden by any concrete classes derived from Abstract
. They would just have an option to call Abstract::pure_virtual()
explicitly if they need to.
The details are here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With