Hi Colin, yes the classes should have a dictionary. All ROOT GUI classes of course have a dictionary so you only have to create them for your own classes. We are aware of the map<> problem which will soon be fixed. On the otherhand you classes don't have to support persistency to be able to have a dictionary and use the signal/slot mechanism. So the easiest thing is to use: ClassDef(myclass,0) // 0 means class is not persistent Cheers, Fons. Colin Bernet wrote: > > Hi, > > I'm trying to convert a GUI (compiled program) to the signal/slot > communication mechanism. The signals being not catched by the slots, I > was wondering if a dictionnary is necessary to use signal/slots. > > This brings me to a second question, concerning rootcint. Trying to > generate the dictionnary for this program's classes, I run into the > following problems : > > - maps don't look to be correctly handled by rootcint. I have a > map<string, TCanvas*> and a map<string, bool>, and I get the following > message for both of them when compiling the dictionnary : > > Dict.cc:1123: `R__t2' undeclared (first use this function) > Dict.cc:1123: (Each undeclared identifier is reported only once > Dict.cc:1123: for each function it appears in.) > > I had a look in the generated code : R__t2 is not declared, and I found > some other strange uses of these maps too, eg : > > R__b << int(fDetInTree.size()); > map<string,bool>::iterator R__k; > for (R__k = fDetInTree.begin(); R__k != fDetInTree.end(); ++R__k) { > > static TString R__str = (*R__k).c_str(); > // should be static TString R__str = ((*R__k).first).c_str(); ? > > R__str.Streamer(R__b); > } > > - streams also seem to be a problem > Dict.cc:1130: no match for `TBuffer & >> ifstream *&' > > Am I doing a mistake ? Are these types currently supported by root ? > Thanks, > Colin > > Here are the messages I get when the dictionnary is generated and > compiled : > > /usr/local/root/3.01-00/root/bin/rootcint -f Dict.cc -c > \ > -Wall -O2 -I/usr/local/root/3.01-00/root/include -g -I../../src > -I../../expat/xmlparse -ansi Plane.h Plane1V.h PlaneTrigTime.h > PlaneDriftChamber.h PlaneFiberHodo.h PlaneMicromegas.h PlaneTrigHodo.h > PlaneMwpc.h PlaneScifi.h PlaneBMS.h PlaneRICH1.h MainFrame.h > StartFrame.h Monitor.h LinkDef.h > Warning: File "Monitor.h" already loaded > *** Datamember Plane1V::fChannelKept: no size indication! > *** Datamember Plane1V::fChannelKept: pointer to fundamental type (need > manual intervention) > *** Datamember Plane1V::fTimeKept: no size indication! > *** Datamember Plane1V::fTimeKept: pointer to fundamental type (need > manual intervention) > *** Datamember Plane1V::fChannel: no size indication! > *** Datamember Plane1V::fChannel: pointer to fundamental type (need > manual intervention) > *** Datamember Plane1V::fTime: no size indication! > *** Datamember Plane1V::fTime: pointer to fundamental type (need manual > intervention) > c++ -I. -Wall -O2 -I/usr/local/root/3.01-00/root/include -g -I../../src > -I../../expat/xmlparse -ansi -c Dict.cc -o Dict.o > Dict.cc: In method `void MainFrame::Streamer(class TBuffer &)': > Dict.cc:853: warning: `char * R__t' might be used uninitialized in this > function > Dict.cc:854: warning: `Char_t * c' might be used uninitialized in this > function > Dict.cc: In method `void Monitor::Streamer(class TBuffer &)': > Dict.cc:1123: `R__t2' undeclared (first use this function) > Dict.cc:1123: (Each undeclared identifier is reported only once > Dict.cc:1123: for each function it appears in.) > Dict.cc:1130: no match for `TBuffer & >> ifstream *&' > /usr/local/root/3.01-00/root/include/TBuffer.h:278: candidates are: > TBuffer::operator >>(Char_t &) > /usr/local/root/3.01-00/root/include/TBuffer.h:340: > TBuffer::operator >>(UChar_t &) > /usr/local/root/3.01-00/root/include/TBuffer.h:285: > TBuffer::operator >>(Short_t &) > ... and so on .... > > Colin Bernet > Tel. +49-6131/39-23192 > Fax +49-6131/39-22964 -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:44 MET