Hi all, I encountered a small problem, of which I don't know whther it is a plain C++ thing or zomething more CINT-specific. I think this is quite a common thing, so I'll pose the question here: Suppose I have a class with a Pointer data member. If I want to use this pointer dynamically, i.e. be able to change the thing to which the pointer points during execution, the class defention would look somthing like this: //TTry.h: class TTry { public: TTry(TH1F& tmpH = 0); Fill(TH1F& tmpH); IsFilled(); ~TTry() {;} protected: TH1F* fHisto=0; }; //TTry.C: #include "TTry.h" TTry::TTry(TH1F& tmpH) { if (tmpH!=0) fHisto = new TH1F(tmpH); } void TTry::Fill(TH1F& tmpH) { fHisto = new TH1F(tmpH); } Int_t TTry::IsFilled() { if (fHisto!=0) return 1; else return 0; } Using this class at the root-prompt: .L TTry.C TTry a a.IsFilled() Shows that the class is assumed to be filled, i.e. fHisto != 0. This can be solved by adding a line fHisto=0 in the constructor. This behaviour seems to be in contarst with the fact that typing TH1F *a at the ROOT-prompt return a Null-Pointer. The question is: 1) Is there a way to initialize class data members in the class definition? 2) Does the type TH1F* have a "default constructor", and, if so, why doesn't it set the pointer to zero (in this case? By the way: isn't ROOT supposed to execute the macro ~/rootlogon.C or $HOME/rootlogon.C at startup? If it doesn't why could that be?? Thanks, Marco van Leeuwen
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:37 MET