I think the problem is missing static member body declaration. You need to add
following declaration outside of Geometry class definition.
int Geometry::m_pixel_b_layer[26];
int Geometry::m_pixel_barrel_1[26];
int Geometry::m_pixel_barrel_2[22];
int Geometry::m_sct_barrel_1[24];
int Geometry::m_sct_barrel_2[24];
int Geometry::m_sct_barrel_3[24];
int Geometry::m_sct_barrel_4[24];
int Geometry::m_pixel_disk_1[8];
int Geometry::m_pixel_disk_2[8];
int Geometry::m_pixel_disk_3[8];
int Geometry::m_pixel_disk_4[4];
int Geometry::m_sct_disk_1[24];
int Geometry::m_sct_disk_2[16];
int Geometry::m_sct_disk_3[24];
int Geometry::m_sct_disk_4[24];
int Geometry::m_sct_disk_5[24];
int Geometry::m_sct_disk_6[24];
int Geometry::m_sct_disk_7[16];
int Geometry::m_sct_disk_8[16];
int Geometry::m_sct_disk_9[8];
Please read C++ documentation about static data member declaration. You
need both definition and declaration. Making the static member non-public
masks the problem because linker does not check existence of the member,
but it will cause problem anyway.
class A {
public:
static int a; // declaration
};
int A::a = 123; // definition
Masaharu Goto
>Hi Simon,
>To get your class working, move the definition of static members
>from the public to private or protected area.
>The problem has been reported to Masa.
>
>Rene Brun
>
>S.J.M. Peeters wrote:
>
> Hi ROOTers,
>
> I would like CINT to recognize my class, but it will not, whatever I do.
> I followed the example, used the standard MyClass as stated there and that
> works. When I use my class (Geometry) it will not recognize it:
>
> root [0] Geometry a;
> Error: No symbol Geometrya in current scope FILE:/var/tmp/aaaa18497
> LINE:1
> *** Interpreter error recovered ***
>
> I suspect the problems is in the statics I use, but I'm not sure.
> Is this the problem? If so, what can I do about it?
> If not so, can anybody see the problem?
>
> This is the header file:
> (the statics are at the bottom)
>
> #ifndef __GEOMETRY_H__
> #define __GEOMETRY_H__
>
> #include "config.h"
> #include "TMath.h"
>
> class Geometry
> {
> private:
>
> int m_dice1;
> int m_dice2;
> int m_dice3;
>
> public:
>
> Geometry(int dice1, int dice2, int dice3);
> Geometry();
>
> // set member variables
> void set_dice1(int dice1);
> void set_dice2(int dice2);
> void set_dice3(int dice3);
>
> // return ring number
> // 1 - x
> // Count from IP to outside
> int pixel_barrel_ring(void);
> int pixel_disk_ring(void);
> int sct_barrel_ring(void);
> int sct_disk_ring(void);
> int ring(void);
>
> // return subring: 0 or 1
> int sct_disk_subring(void);
> int subring(void);
>
> // return sign z axes of module position
> // pixelbarrel has 0
> int pixel_disk_z_sign(void);
> int sct_disk_z_sign(void);
> int z_sign(void);
>
> // if (tilt) the module is tilted
> int tilt(void);
>
> // return r of z coordinate
> float r_ring(void);
> float z_ring(void);
>
> // return eta at (r,z)
> float eta(float r, float z);
>
> // return pseudo rapidity range of module
> float D_eta(void);
>
> // return number of subdetectors in subsystem (for looping)
> int number_of_detectors(void);
> int number_of_subdetectors(void);
> int number_of_rings(void);
>
> // return code as function of counter (for looping)
> int dice1_code(int cntr);
> int dice2_code(int cntr);
> int dice3_code(int cntr);
>
> static int m_pixel_b_layer[26];
> static int m_pixel_barrel_1[26];
> static int m_pixel_barrel_2[22];
> static int m_sct_barrel_1[24];
> static int m_sct_barrel_2[24];
> static int m_sct_barrel_3[24];
> static int m_sct_barrel_4[24];
> static int m_pixel_disk_1[8];
> static int m_pixel_disk_2[8];
> static int m_pixel_disk_3[8];
> static int m_pixel_disk_4[4];
> static int m_sct_disk_1[24];
> static int m_sct_disk_2[16];
> static int m_sct_disk_3[24];
> static int m_sct_disk_4[24];
> static int m_sct_disk_5[24];
> static int m_sct_disk_6[24];
> static int m_sct_disk_7[16];
> static int m_sct_disk_8[16];
> static int m_sct_disk_9[8];
>
> };
> #endif
>
> --
> NIKHEF, National Institute for Nuclear and High Energy Physics
> Kruislaan 409, office H-044 Tel:(+31-20-592) 5140
> P.O. Box 41882, 1009 DB Amsterdam (NL) Fax:(+31-20-592) 5155
> CERN, building 40, office 2-D06 Tel:(+41-22-76) 71157