Problems with TClonesArray

Diego Casadei (casadei@bo.infn.it)
Wed, 13 May 1998 14:36:53 -0500 (CDT)


Hello Rooters!

I have some problem using TClonesArray. In the documentation I found an
interesting note: the use of AddAt & Co. is discouraged, because the
programmer should use the operator [] features. I tried. This is the
code:

// in data.h
class TAMSRun : public TObject {
private:
Int_t Nrun; // run number
Int_t nEvt; // number of events
TClonesArray *events;
public:
TAMSRun();
TAMSRun(Int_t r,TAMSEvent ev);
~TAMSRun();
Int_t GetRun(){return(Nrun);};
Int_t GetEvtN(){return(nEvt);};
void SetRun(Int_t r){Nrun=r;return;};
TClonesArray* GetEvent();
Int_t AddEvent(TAMSEvent ev);
};

// in data.cxx
TAMSRun::TAMSRun(Int_t r,TAMSEvent ev){
Nrun=r;
events=new TClonesArray("TAMSEvent",1);
events[0]=new TAMSEvent(ev);
nEvt=1;
return;
}

and this is the error I get:

cxx: Error: data.cxx, line 15: In this statement, "events[0]" does not
have an assignment operator.
events[0]=new TAMSEvent(ev);
--^

OK, it seems that I can use the operator [] for fetching one element, but
not for assignments (at least, this is what I guess).

Then I found in the RootTalk Digest a message from Stephen Eichblatt
in which he says that he used a different syntax:

> In the end, i do it like the Event / Track example, using the
>
> TClonesArray &tracks = *fTracks;
> new(tracks[fNtrack++]) Track(random);
>
> which works.

I tried, writing:

TAMSRun::TAMSRun(Int_t run,TAMSEvent ev){
Nrun=run;
events=new TClonesArray("TAMSEvent",1);
new(events[0]) ev;
nEvt=1;
return;
}

getting:

cxx: Error: data.cxx, line 15: Missing type specifier or type qualifier.
new(events[0]) ev;
-----------------^

Now I have no idea: how can I assign the object ev to the j-th element of
a TClonesArray?

PS. I used events=new TClonesArray("TAMSEvent",1);
because I want to expand the array when I add the next element.

Diego Casadei
casadei@bo.infn.it
casadei@cern.ch