Hi rooters, A new version of my previous question, this time with a TObjArray. I would like to understand why the program below does not work. So to be able to collect in a TObjArray some non-TObject objects (TString in the example below), I use a template which transform the class T into a TObject via double inheritance. When I write and reread the TObjArray, the program crash. Any idea ? David C. =================================================== the file with the template =================================================== #include <TObject.h> template <class T> class RtObj : public TObject, public T { public: RtObj() {} RtObj( const T & val ) : T(val) {} ClassDefT(RtObj,1) } ; ClassDefT2(RtObj,T) ClassImpT(RtObj,T) =================================================== the linkdef file =================================================== #ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class RtObj<TString>+; #endif =================================================== the main file =================================================== int main() { // begin TROOT rdummy("dummy","dummy") ; // write TFile * file = new TFile("RtObj.root","recreate") ; TObjArray array ; array.AddLast( new RtObj<TString>("hello world") ) ; array.Write("array",TObject::kSingleKey) ; file->Close() ; delete file ; // read file = new TFile("RtObj.root","read") ; TObjArray * parray = (TObjArray *)(file->Get("array")) ; cout<<*((RtObj<TString> *)((*parray)[0]))<<endl ; file->Close() ; delete file ; // end return 0 ; }
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:48 MET