I think that giving a simple example is better:
//-------file joe.cxx
#include "TObject.h"
//-------------------------
class A {
private:
int fA1;
int fA2;
public:
A() {fA1=1;fA2=2;}
ClassDef(A,0)
};
//-------------------------
//class B : public A, public TObject { //<===wrong order
class B : public TObject, public A {
private:
int fB1;
int fB2;
public:
B() {fB1=11;fB2=12;}
ClassDef(B,1)
};
ClassImp(A)
ClassImp(B)
//------------end of jeoe.cxx
In interactive root, do
root > .L joe.cxx++
root > TFile f("junk.root","recreate");
root > B b;
root > b.Write("b");
ClassDef is mandatory for all classes involved in I/O.
Specify ClassDef(A,0) if you do not want to write the members
Rene Brun
joer00@bellsouth.net wrote:
>
> Rene,
>
> just to be 100 % sure now, from you posts this should work: (if yes just asnwer yes to save time, if no please explain because it than cotradicts with your provious posts !)
>
> Class A does NOT deriver from TObject, does NOT define the ClassDef macros and has NO streamer. It HAS datamemebers which I do NOT want/need to write to disk.
>
> Class B:public A,TObject
>
> DOES deriver from TObject, DOES implement ClassDef, HAS a dictionary file,HAS data members which need to be written to disk.
>
> BObject->Write("NAME"); and
> BObject=(B*)SomeFile->Get("Name");
>
> WILL work although base class does NOT deriver from TObject and has no streamer !
>
> Joe
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:39 MET