Hi Andreas,
A declaration like
Float_t * m_delta;
in a class is assumed to be a variable length array of floats by default.
To do I/O with this class, Root needs to know the effective length
of the array. A declaration like
Float_t * m_delta; //[m_len]
is required, where m_len is a data member of the class with the effective
length of then array.
When reading your class "Calculate", Root will automatically delete
th array m_delta and recreate a new array with the length m_len.
If your array is a fix length array (1-d, 2-d or more) you should use
Float_t m_delta[4][4];
instead of the pointer.
Rene Brun
Andreas WILDAUER wrote:
>
> Hi everybody,
>
> I have quite a strange problem:
>
> in class CONFIG I have:
>
> config.h: ***************
> private:
> Float_t m_delta[4][4];
>
> public:
> Float_t * delta(int dset);
>
> config.C: ****************
>
> m_delta[0][0] = 0.07;
> m_delta[0][1] = 0.06;
> m_delta[0][2] = 0.05;
> m_delta[0][3] = 0.05;
> a.s.o.
>
> Float_t * config::delta(Int_t dset) { return m_delta[dset];}
>
> where m_delta[0] for example is a pointer on the four Float_t's
> m_delta[0][0-3]
> *******************************************************
> in the CALCULATE class I have:
>
> calculate.h: *******************
> Float_t * m_delta;
>
> and in calculate.C: *************
> config configobj;
> m_delta = configobj.delta(0);
>
> So far m_delta should be a pointer on 4 Float_t's, namely: m_delta[0][0-3]
> which were defined in conifg.C.
> ********************************************************
> now I also have a printvalues member function in class CALCULATE.
> the code in MAIN program main.C is the following:
>
> calculateobj.printvalues();
> cout << "GetEntries" << endl;
> fChain->GetEntry(jentry);
> calculateobj.printvalues();
>
> where fChain is a private data member of the MAIN class (which also has all
> the ntuple variables as usual (from setMakeClass)).
> if i load main.C (not compiling) the output is:
>
> m_delta[0] = 0.07
> m_delta[1] = 0.06
> m_delta[2] = 0.05
> m_delta[3] = 0.05 // CORRECT
> GetEntries
> m_delta[0] = 9.3887e-44
> m_delta[1] = 2.71071e-33
> m_delta[2] = nan
> m_delta[3] = 2.7111e-33 // ?????????????????????????
>
> ????????????????????????
> how can fChain->GetEntry(jentry); change the memory where the pointers
> m_delta[0-3] point to (which are private data members of another class,
> namely CALCULATE)
>
> or is it wrong to assume that array[0] is a pointer when the array is defined
> as array[4][4] (like array1 is a pointer on array1[27], what I also use and
> it works ...)
>
> Please help
> Thanks in advance
> Andi Wildauer
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET