Hi, Thanks for the replies! Valeri you are right I was confused with the CINT/ROOT behavior. The snippet of code that Christian suggested works fine. Thanks again! Stelios. > -----Original Message----- > From: Valeri Fine [mailto:fine@bnl.gov] > Sent: Saturday, July 31, 2004 7:40 PM > To: 'Christian Vogel'; 'Stilianos Kesisoglou' > Cc: roottalk@pcroot.cern.ch > Subject: RE: [ROOT] compilation problem (corrected) > > Hello Stelios. > > The original code is WRONG from the C++ syntax point of view. This is > what you were said by the C++ compiler. > > You were confused with the smart CINT/ROOT behavior. > That allows skipping the declaration of the object in the > ROOT macro if > that object class CINT dictionary is loaded. That is NOT possible with > the compiled code. > > In your case CINT (on ROOT behalf) automatically creates a > new variable > "c1" - the "pointer" to the object class. ROOT knows (via > TObject::Class() method) the object class definition from the CINT > dictionary and it can "ask" CINT to create the new variable > "automatically". > In your case it is "c1". The name of the variable is chosen from the > object name and the type of this variable is the pointer to the object > class namely "TCanvas". > > Apparently such level of cooperation is not possible between the ROOT > and real compiler. > > So you must avoid the CINT/ROOT C++ extensions those are appropriated > for the interactive session. It can be a part of CINT /ROOT macros as > well. However they are no use with the normal compiler. > > Hope this helps, Valeri > > > > -----Original Message----- > > From: owner-roottalk@pcroot.cern.ch > [mailto:owner-roottalk@pcroot.cern.ch] > > On Behalf Of Christian Vogel > > Sent: Saturday, July 31, 2004 6:07 PM > > To: Stilianos Kesisoglou > > Cc: roottalk@pcroot.cern.ch > > Subject: Re: [ROOT] compilation problem (corrected) > > > > Hi, > > > > I re-indented your function to make my point more clear: > > > > On Sat, Jul 31, 2004 at 02:18:45PM -0500, Stilianos > Kesisoglou wrote: > > > void Performance() > > > { > > > if ((TCanvas*)gROOT->GetListOfCanvases()->FindObject("c1")){ > > > c1->Clear(); /* <--- HERE c1 is not declared! */ > > > } else { > > > TCanvas *c1 = new TCanvas(); > > > } > > > } > > > > You proably want to do something like this: > > > > { > > TCanvas *c1 = gROOT->GetListOfCanvases()->FindObject("c1"); > > if(c1) > > c1->Clear(); > > else > > c1 = new TCanvas(); > > > > (...) > > } > > > > Chris > > > > -- > > Programming today is a race between software engineers striving to > build > > bigger and better idiot-proof programs, and the Universe trying to > > produce bigger and better idiots. So far, the Universe is winning. > > -- Rich Cook > >
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET