Hi Matt, I do not see any problems with your class. I created two files //file ThresholdCurve.h #include "TGraph.h" class ThresholdCurve:public TGraph { public: bool calib; // Threshold calibrated? bool ismod; // Is it a module? int id; // Module (or plane if a plane) id ThresholdCurve() {id = 0; calib = true; ismod = true;} virtual ~ThresholdCurve() {} void SetCalib(bool c = true) { calib = c;} bool GetCalib() {return calib;} void SetId(int i) {id = i;} int GetId() {return id;} void SetIsMod(bool m) {ismod = m;} bool GetIsMod() {return ismod;} ClassDef(ThresholdCurve, 1) }; and //ThresholdCurve.cxx #include "ThresholdCurve.h" ClassImp(ThresholdCurve) then ran the following Root session without problems root > .L ThresholdCurve.cxx++ root > t = new ThresholdCurve root > t->Inspect() and I get the Inspect canvas from which i produce the inspect.gif file in the attachement. Rene Brun On Fri, 16 Aug 2002, Matt Palmer wrote: > Hi, > I have a very bizarre problem: > I have a class which derives from TGraph: > class ThresholdCurve:public TGraph { > public: > bool calib; // Threshold calibrated? > bool ismod; // Is it a module? > int id; // Module (or plane if a plane) id > ThresholdCurve() {id = 0; calib = true; ismod = true;} > virtual ~ThresholdCurve() {} > void SetCalib(bool c = true) { calib = c;} > bool GetCalib() {return calib;} > void SetId(int i) {id = i;} > int GetId() {return id;} > void SetIsMod(bool m) {ismod = m;} > bool GetIsMod() {return ismod;} > ClassDef(ThresholdCurve, 1) > }; > > The ClassImp macro is in the .cpp file > > I compile this as part of a shared object library and load it into root: > > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 3.03/07 6 August 2002 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > > FreeType Engine v1.x used to render TrueType fonts. > Compiled for linuxicc with thread support. > > CINT/ROOT C/C++ Interpreter version 5.15.51, July 19 2002 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > root [0] .L libTB2001.so > root [1] t = new ThresholdCurve > (class ThresholdCurve*)0x87dea38 > root [2] gDebug = 1000 > (const int)1000 > root [3] t->Inspect() > SetTextSize: -1.000000 > > *** Break *** segmentation violation > Root > SetTextSize: -1.000000 > > And as you can see, there is a seg violation. If I change the inheritance to: > class ThresholdCurve: TNamed { > //as above > }; > > Then it works fine > Changing it again to: > class ThresholdCurve: TNamed, TAttFill { > //as above > }; > gives the same error as above. Does anyone have any idea what might be > wrong? I suspect that it is something to do with the multiple inheritance > from classes that don't derive from TObject, but I couldn't see anything > special in the TGraph class to make it work. > > Thanks > Matt >
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:04 MET