Re: [ROOT] template function and dictionnary generation problem

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Mar 19 2003 - 11:49:20 MET


Hi Benoit,

CINT does not support the old style omanip (in iomanip.h).
You have to use #ifdef to exclude it when running rootcint.

Note that your code will not compile under gcc3.2.
You better remove omanip anyhow.

Rene Brun

Benoit Revenu wrote:
> 
> SAME MAIL AS BEFORE BUT WITH A SUBJECT
> 
> Dear rooters,
> 
> I'm trying to use omanip in a header file where I define a class which
> will be in a dictionnary.
> 
> One of the functions defined in this file is:
> =============================================
> inline omanip<int> space(int Spacing)
> {
>   return omanip<int>(space,Spacing);
> };
> 
> The class defined is A and the LinkDef is simply
> ... (usual stuff)
> #pragma link C++ class A;
> 
> #endif
> 
> The result of the compilation is :
> Error: no such template omanip<int> FILE:../src/Class.h LINE:14
> Warning: Error occured during reading source files
> Warning: Error occured during dictionary source generation
> !!!Removing RootDict.cc RootDict.h !!!
> 
> A solution is to put the "space" function between
> #ifndef __CINT__
> inline omanip<int> space(int Spacing)
> {
>   return omanip<int>(space,Spacing);
> };
> #endif
> 
> and I would like to understand why ! And I would like to avoid to put
> everywhere #ifndef __CINT__.....
> 
> In attachement, there is a tar file containing :
> Class.h (32lines)
> Class.cc (7lines)
> LinkDef.h (10 lines)
> analyse.cc (9 lines), a stupid test
> 
>   --------------------------------------------------------------------------------
>                  Name: omanip.tar
>    omanip.tar    Type: Unix Tape Archive (APPLICATION/X-TAR)
>              Encoding: BASE64



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:10 MET