Hello Rooters,
I have found the problem with casting for classes which are inherited form
two classes.
Let's take class TH3 for example (class TH3 : public TH1, public TAtt3D)
and try to get pointer to the object of the TAtt3D class:
void test(void) {
TH3* pH3=new TH3;
TAtt3D* pAtt3D;
printf("\n--------TH3*= %+8x\n\n",pH3);
for(Int_t i=0; i<3; i++) {
pAtt3D=dynamic_cast<TAtt3D*>(pH3); printf("1_%i_1: TAtt3D*=
%+8x\n",i,pAtt3D);
pAtt3D=dynamic_cast<TAtt3D*>(pH3); printf("1_%i_2: TAtt3D*=
%+8x\n",i,pAtt3D);
pAtt3D=dynamic_cast<TAtt3D*>(pH3); printf("1_%i_3: TAtt3D*=
%+8x\n\n",i,pAtt3D);
}
for(Int_t i=0; i<3; i++) {
pAtt3D=(TAtt3D*)pH3; printf("2_%i_1: TAtt3D*= %+8x\n",i,pAtt3D);
pAtt3D=(TAtt3D*)pH3; printf("2_%i_2: TAtt3D*= %+8x\n",i,pAtt3D);
pAtt3D=(TAtt3D*)pH3; printf("2_%i_3: TAtt3D*= %+8x\n\n",i,pAtt3D);
}
}
The output will:
--------TH3*= 8d61250
1_0_1: TAtt3D*= 8d61488 ok.
1_0_2: TAtt3D*= 8d61488 ok.
1_0_3: TAtt3D*= 8d61488 ok.
1_1_1: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
1_1_2: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
1_1_3: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
1_2_1: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
1_2_2: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
1_2_3: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
2_0_1: TAtt3D*= 8d61488 ok.
2_0_2: TAtt3D*= 8d61488 ok.
2_0_3: TAtt3D*= 8d61488 ok.
2_1_1: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
2_1_2: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
2_1_3: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
2_2_1: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
2_2_2: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
2_2_3: TAtt3D*= 8d61250 it's pointer to TH3 but not to TAtt3D
In compiled code it's work
I see also some problems with reading such kind of objects from
root file by TBrowser. Some times I have wrong resalts some times
*** Break *** segmentation violation
Best regards,
Vladimir.
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:53 MET