Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ > Virtual Instanc...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 2 Topic 44048 of 47561
Post > Topic >>

Virtual Instancing of Derived Class

by crjjrc <crjjrc@[EMAIL PROTECTED] > Mar 21, 2008 at 06:28 AM

Hi.  I've got a hierarchy of cl***** and I'm storing pointers to a mid-
level class Der1 in a vector.  These pointers point to a handful of
cl***** derived from Der1, and Der2 is one such class.  Cl***** below
Der1 implement a virtual function Helper() from the Base class, and
this function is typically called from a base class method
GetInstance().  I'm getting an error from g++ that I don't fully
understand.

The code is:

--------------------------------------------
#include <iostream>
#include <vector>

class Base {
   public:
      virtual Base *GetInstance() {
         std::cout << "in Base::GetInstance()" << std::endl;
         return Helper();
      }
      virtual Base *Helper() = 0;
};

class Der1 : public Base {
   public:
};

class Der2 : public Der1 {
   public:
      Der2 *Helper() {
         std::cout << "in Der2::Helper()" << std::endl;
         return new Der2();
      }
};

int main() {

   Der2 d2;
   Der1 *d1 = &d2;

   std::vector<Der1 *> der1s;

   der1s.push_back(d1->GetInstance());

   return 0;

}
--------------------------------------------

On compiling, g++ tells me:

woo.cpp: In function 'int main()':
woo.cpp:32: error: invalid conversion from 'Base*' to 'Der1*'
woo.cpp:32: error:   initializing argument 1 of 'void std::vector<_Tp,
_Alloc>::push_back(const _Tp&) [with _Tp = Der1*, _Alloc =
std::allocator<Der1*>]'

It seems that the return value of Der2::Helper() is implicitly cast
from Der2 * to Base * by Base::GetInstance().  In order to fix this,
it seems I have to use dynamic_cast:

   der1s.push_back(dynamic_cast<Der1 *>(d1->GetInstance()));

Is this the correct diagnosis and a suitable solution to this problem?
 




 2 Posts in Topic:
Virtual Instancing of Derived Class
crjjrc <crjjrc@[EMAIL   2008-03-21 06:28:10 
Re: Virtual Instancing of Derived Class
"Victor Bazarov"  2008-03-21 09:58:31 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sun Sep 7 3:47:39 CDT 2008.