[ROOT] Namespace problems with rootcint (was: Using a class from a shared lib)

From: Ole Streicher (ole@ifh.de)
Date: Mon Sep 02 2002 - 15:51:03 MEST


Hello again!

Ole Streicher writes:
 > What I could imagine is that "root" has problems with namespaces; I
 > declared the constructor of MyRun as
 > my::MyRun::MyRun(std::string, int, std::string = "none");
 > but Root thinks it is
 > my::MyRun::MyRun(my::string,int,my::string=none);

I tried to debug this a bit and I found out that it is probably a
problem of rootcint. When I compile the minimal class definition

#include <string>
namespace my {
  class MyClass {
  public:
    int GetMe(std::string);
    ClassDef(MyClass, 1)
  };
}

rootcint produces a function "static void G__setup_memfuncmycLcLMyClass(void)"
that contains a line 

G__memfunc_setup("GetMe",466,G__mycLcLMyClass_GetMe_0_0,105,-1,-1,0,1,1,1,0,"u 'string' - 0 - -",(char*)NULL,(void*)NULL,0);

Here one can see, that "string" lacks the "std::" namespace. If I write
something from my own namespace as parameter, rootcint puts the name
including my namespace here. How shall I proceed here? 

The other problem I found is that "rootcint" seems to not accept other
names for the LinkDef file than LinkDef.h:

$ cp LinkDef.h LD.h
$ rootcint -f MyClassDict1.cpp -c MyClass.h LinkDef.h
$ rootcint -f MyClassDict2.cpp -c MyClass.h LD.h
$ ls -l MyClassDict?.cpp
-rw-r--r--    1 ole      ole         13517 Sep  2 15:42 MyClassDict1.cpp
-rw-r--r--    1 ole      ole          6922 Sep  2 15:42 MyClassDict2.cpp

Why are they different? Is this a bug or a feature?

Ole



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:06 MET