Hi,
Constructors of one of my classes are missing in the dictionary generated by rootcint in ROOT v.4. How can determine what is wrong?
A more detailed description follows:
I write a ROOT class library which I use in interactive sessions and in compiled programs. Both gcc and icc do not report any errors and compiled programs run OK. The dictionary contained the constructors when I used ROOT 3.10/02 but they are missing when I use 4.00/04 or 4.00/06a. I haven’t tested other versions of ROOT.
The dictionary is generated by
rootcint -v -f ctmodDict.cc -c -DUSE_ROOT $(HDRS) ctmodLinkDef.h
where $(HDRS) refers to approximately 50 header files.
A section of the class code is:
TVpPointDetectorArrayPlanar();
TVpPointDetectorArrayPlanar(TVpVector3 const center,
TVpVector3 const stepX, TVpVector3 const stepY,
Int_t nx, Int_t ny, Int_t numOfChannels,
Double_t minEnergy, Double_t maxEnergy,
TVpDetectorResponse *detectorResponse = 0);
TVpPointDetectorArrayPlanar(Char_t *fileName);
virtual ~TVpPointDetectorArrayPlanar() {};
void SetPosition(TVpVector3 const& center, TVpVector3 const& stepX, TVpVector3 const& stepY);
The relevant section of the dictionary (4.00/06a) is:
/* TVpPointDetectorArrayPlanar */
static int G__ctmodDict_255_4_0(G__value *result7,G__CONST char *funcname,struct G__param *libp,int hash) {
G__setnull(result7);
((TVpPointDetectorArrayPlanar*)(G__getstructoffset()))->SetPosition(*(TVpVector3*)libp->para[0].ref,*(TVpVector3*)libp->para[1].ref
,*(TVpVector3*)libp->para[2].ref);
return(1 || funcname || hash || result7 || libp) ;
}
Note the index starts from _4_0 and refers to the SetPosition() member function.
The 3.10/02 version of the dictionary is:
/* TVpPointDetectorArrayPlanar */
static int G__ctmodDict_248_0_0(G__value *result7,G__CONST char *funcname,struct G__param *libp,int hash) {
TVpPointDetectorArrayPlanar *p=NULL;
if(G__getaryconstruct()) p=new TVpPointDetectorArrayPlanar[G__getaryconstruct()];
else p=::new((G__ctmodDictdOcc_tag*)G__getgvp()) TVpPointDetectorArrayPlanar;
result7->obj.i = (long)p;
result7->ref = (long)p;
result7->type = 'u';
result7->tagnum = G__get_linked_tagnum(&G__ctmodDictLN_TVpPointDetectorArrayPlanar);
return(1 || funcname || hash || result7 || libp) ;
}
...
static int G__ctmodDict_248_4_0(G__value *result7,G__CONST char *funcname,struct G__param *libp,int hash) {
G__setnull(result7);
((TVpPointDetectorArrayPlanar*)(G__getstructoffset()))->SetPosition(*(TVpVector3*)libp->para[0].ref,*(TVpVector3*)libp->para[1].ref
,*(TVpVector3*)libp->para[2].ref);
return(1 || funcname || hash || result7 || libp) ;
}
The index starts from _0_0 and all constructors are there. The SetPosition() function has the index _4_0.
The problem may be somewhere in my code, any suggestions would be appreciated.