Your base class is a pure virtual class and the second derived class becomes also virtual as you are not defining the virtual function in it. That's why you can't instantiate it's object. Define that virtual function inside the second derived class and you'll be able to create object.

This may sound weird because it isn't exactly technical, but stay with me.

There is no `int figura3::retorna(void)' to call because there is no `figura3' with which to call it and there is no `figura3' because one can't yet exist.

Yea, that doesn't sound to bad, but I'm not sure what you are trying to do as the code has a some errors and you seem to be trying to convert from one derived class to a sibling instead of a parent.

I can't really help until I know what you are trying to do, but other will be along. Until then, if you want to invoke a method, you need an object, an instance, of the type to which that method belongs. That object can be an instance of a class, contained as a member of a class, or as a parent of class. One way or the other, you need that object.

You can't access it from minifgura2 unless you make it a friend class of d_figura2.

Erm, retorna is a public function. You don't need friends.
But it is inside d_figura3, and not d_figura2, which really means that need an instance of d_figura3 to use. How to do or why are questions I cannot answer since I don't understand what you're trying to do.

Erm, retorna is a public function. You don't need friends.
But it is inside d_figura3, and not d_figura2, which really means that need an instance of d_figura3 to use. How to do or why are questions I cannot answer since I don't understand what you're trying to do.

There are lots errors involving pointers, too.

He/she needs to call it from the instance of difigura2. That's why i said him to use friend classes.
I think that's the only way to access using the object of one class and calling other member function of another class...

Erm, no.
All you need--anywhere--is an instance of the class whose member functions you want to use.
Now, if difigura2 wanted to use a private member function in difigura3, then you would need friends.