adding my classes in a namespace to cint

From: Martin Woudstra (Martin.Woudstra@cern.ch)
Date: Tue Feb 15 2000 - 15:24:52 MET


Dear Rooters,

I would like to add classes to cint, to make them available in the
interpreter. My classes are, however, in a namespace.
I did not find on the root www site how to do this, and I did
not manage. Does anyone know how to do this?
I am working on HP_UX 10.20 with aCC.
Root Version   2.22/10 (28 July 1999),
Cint version 5.14.10 (Jul 20 1999)

When my class did not work, I went back to the MyClass example in
http://root.cern.ch/root/CintGenerator.html.

First without any namespace.

rootcint -f maindict.cxx -c -p MyClass.h
Works fine.

Then I put MyClass in namespace 'mine'. Then rootcint gives the following 'Note':

rootcint -f maindict.cxx -c -p MyClass.h
Note: link requested for unknown class MyClass FILE:./G__autoLinkDef.h LINE:7

and cint does not know about the class, nor the namespace:

root [1] .class MyClass
Error: class,struct,union or type MyClass not defined  FILE: LINE:0
*** Interpreter error recovered ***
root [3] .class mine::MyClass
Error: class,struct,union or type mine not defined  FILE: LINE:0
Error: class,struct,union or type mine not defined  FILE: LINE:0
Error: class,struct,union or type mine not defined  FILE: LINE:0
Error: class,struct,union or type mine::MyClass not defined  FILE: LINE:0
*** Interpreter error recovered ***
root [4] .class mine
Error: class,struct,union or type mine not defined  FILE: LINE:0
*** Interpreter error recovered ***


So I added my own mainLinkDef.h file containing:

#ifdef __CINT__

#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;

#pragma link C++ class mine::MyClass;

#endif

and try again:

rootcint -f maindict.cxx -c -p MyClass.h mainLinkDef.h 
Great! 'Note' is gone!

However, at startup of myroot, I get two error messages:

Error: class,struct,union or type mine not defined  FILE: LINE:0
Error: class,struct,union or type mine not defined  FILE: LINE:0
  *******************************************
  *                                         *
  *        W E L C O M E  to  R O O T       *
  *                                         *
  *   Version   2.22/10      28 July 1999   *
  *                                         *
  *  You are welcome to visit our Web site  *
  *          http://root.cern.ch            *
  *                                         *
  *******************************************

CINT/ROOT C/C++ Interpreter version 5.14.10, Jul 20 1999
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
*** Interpreter error recovered ***
root [0] .class MyClass
===========================================================================
class MyClass
 size=0x0
 (tagnum=376,voffset=-1,isabstract=0,parent=-1,gcomp=0,=~cd=0)
List of base class--------------------------------------------------------
List of member variable---------------------------------------------------
Defined in MyClass
List of member function---------------------------------------------------
filename       line:size busy function type and name  (in MyClass)
root [1] .class mine::MyClass
Error: class,struct,union or type mine not defined  FILE: LINE:0
===========================================================================
class MyClass
 size=0x0
 (tagnum=376,voffset=-1,isabstract=0,parent=-1,gcomp=0,=~cd=0)
List of base class--------------------------------------------------------
List of member variable---------------------------------------------------
Defined in MyClass
List of member function---------------------------------------------------
filename       line:size busy function type and name  (in MyClass)
*** Interpreter error recovered ***
root [2] 

The class name is there (outside the namespace!), but the class is empty...
The namespace is not recognised.

I then tried in mainLinkDef.h several combination of the following pragma's:
#pragma link C++ namespace mine;
#pragma link C++ nestedclass;
#pragma link C++ nestedtypedef;
#pragma link C++ defined_in namespace mine;
#pragma link C++ defined_in mine;

All with different errors/problems. I did not find the magic combination.
Could somebody please help me with this?

Regards,
Martin.



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET