[ROOT] Accessing TClonesArray objects

From: Dario.Motta@mpi-hd.mpg.de
Date: Wed Feb 27 2002 - 18:35:56 MET


Hi rooters,
I apologize in advance for my stupid question: I'm very new either in ROOT
and in C++ and I'm myself surprised already how far I could nevertheless
move...

I've defined my "Event" class, which contains (among the others) a
TClonesArray of the class "DataCh", which I also defined and implemented.
The class "Event" has a GetDataCh() function, which simply returns
the pointer to the TClonesArray member:

------------------------------------------
class Event: public TObject	{

private:
	(...)
	TClonesArray  *fDataCh;
	(...)
public:
	(...)
	TClonesArray	*GetDataCh() const {return fDataCh;}
	(...)
};
--------------------------------------------
In the constructor of the Event class, the TClonesArray is created as
follows (I used the "Event.cxx" in the test directory as a model):

--------------------------------------------
	if(!fgDataChs) fgDataChs=new TClonesArray("DataCh",32);
	fDataCh=fgDataChs;
--------------------------------------------

Now, since I want to make sure I'm correctly filling my objects, I would
like to get the data members of the single array elements of "fDataCh".

Hence in my 'main' I wrote:

--------------------------------------------
(...)
TClonesArray *gino=new TClonesArray("DataCh",32); //I create a "copy" array
gino=event->GetDataCh(); //I assign the copy to the actual member of 'event'
(...)
DataCh dino = *(gino+i); //I try to assign the 'ith' element to a DataCh object
(...)
--------------------------------------------

At compile time I get the following error message for the last command:

"cannot convert `TClonesArray' to `DataCh' in initialization"

from which I understand I could have casting problems...

Why can't I access directly the elements of my TClonesArray, which has
been defined to contain "DataCh" objects?

What's the right way to pick up and copy a single object in a TClonesArray?

Thank you very much for the help...

Best regards,
			Dario Motta



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:43 MET