You need to use virtual inheritance (so that there is only one versin of the common base class) probably, this is C++ though, not ROOT. On Mon, 28 Apr 2003, Benoit Revenu wrote: > Dear Rooters, > > I want a class to inherit from 2 others classes inheriting from TObject. > I don't need this class to be in a dictionnary so that I DON'T get the > rootcint error message : > ------------------------- > Warning: multiple ambiguous inheritance TObject and C. Cint will not get > correct base object address > > I would like to do something like : > -------------------------------------------- > cat test.h: > -------------------------------------------- > #include "TMinuit.h" > #include "TObject.h" > > class A : public TMinuit > { > public: > A(){} > ~A(){} > int a; > ClassDef(A,1) > }; > > class B : public TObject > { > public: > B(){} > ~B(){} > int b; > ClassDef(B,1) > }; > > class C : public A, public B > { > public: > C(){} > //~C(){} > int c; > }; > > ------------------------------------------------- > cat test.cc: > ------------------------------------------------- > #include "test.h" > > ClassImp(A) > ClassImp(B) > ------------------------------------------------- > > ------------------------------------------------- > cat LinkDef.h: > ------------------------------------------------- > #ifdef __CINT__ > > #pragma link off all globals; > #pragma link off all classes; > #pragma link off all functions; > #pragma link off all typedef; > > #pragma link C++ class A; > #pragma link C++ class B; > > #endif > > > Everything is ok if the destructor of C is commented out. If I remove the > destructor, I got : > ../src/test.h: In method `C::~C ()': > ../src/test.h:26: request for member `operator delete' is ambiguous > /opt/root/include/TObject.h:164: candidates are: static void > TObject::operator delete (void *, void *) > /opt/root/include/TObject.h:162: candidates are: static void > TObject::operator delete (void *) > /opt/root/include/TObject.h:164: static void > TObject::operator delete (void *, void *) > /opt/root/include/TObject.h:162: static void > TObject::operator delete (void *) > > What can I do ? Is it even possible ? > > > -- /------------------------------------+-------------------------\ |Stephen J. Gowdy | SLAC, MailStop 34, | |http://www.slac.stanford.edu/~gowdy/ | 2575 Sand Hill Road, | |http://calendar.yahoo.com/gowdy | Menlo Park CA 94025, USA | |EMail: gowdy@slac.stanford.edu | Tel: +1 650 926 3144 | \------------------------------------+-------------------------/
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET