Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pure-specifier on function-definition

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?

like image 717
Bébul Avatar asked Jun 01 '10 15:06

Bébul


People also ask

What is a pure specifier in C++?

[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 ).

What is pure visual function?

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.

What is pure virtual function example?

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.

How do you call a pure virtual function in C++?

In the constructor of Base class, we can call the pure virtual function using 'this' pointer.


1 Answers

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.

like image 56
Dima Avatar answered Oct 08 '22 03:10

Dima