RE: [ROOT] problems inheriting a class from TObject

From: Philippe Canal (pcanal@fnal.gov)
Date: Mon Jul 21 2003 - 21:05:18 MEST


Hi Chris,

Doing 'just'
	#include "Chamber.cxx"
and doing
	.L Chamber.cxx+
	#include "Chamber.cxx"
are 2 very different operation.  The first one is trying to
interpret the class Chamber while the second is compiling it.
And actually, in the second case, it ignores your
	#include "Chamber.cxx"

In short, you should not use
	#include "Chamber.cxx"
on the ROOT/CINT prompt.

The warnings are coming from the fact that Rtypes.h has been
included in the interpreted code (probably indirectly).

Note that deriving an interpreted class from a compiled class
(what happens if you use the first syntax, is not fully supported).

Also, you should __not__ use something like:

	#include "/afs/..../TObject.h"

This will make you next upgrade to a newer version of ROOT really
annoying.  Instead on the compile line you should do:

	g++ .... `root-config --cflags` ....



-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Chris Hayward
Sent: Monday, July 21, 2003 1:26 PM
To: ROOT Talk Mailing List
Subject: [ROOT] problems inheriting a class from TObject


Hello,
I am using ROOT 3.05/06 with gcc 2.96 on lxplus. I have defined a class
Chamber that inherits from TObject so that I can use ROOT I/O. I have
created a dictionary for the class using rootcint. When I type:

#include "Chamber.cxx"

in interactive mode of ROOT, I get the following errors:

Warning: Re-initialization ignored const kMaxUShort
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/Rtypes.h
LINE:97
Warning: Re-initialization ignored const kMaxShort
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/Rtypes.h
LINE:98
Warning: Re-initialization ignored const kMaxUInt
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/Rtypes.h
LINE:99
Warning: Re-initialization ignored const kMaxInt
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/Rtypes.h
LINE:100
Warning: Re-initialization ignored const kBitsPerByte
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/Rtypes.h
LINE:103
Warning: Re-initialization ignored const kNPOS
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/Rtypes.h
LINE:104
Limitation: Reference member not supported. Please use pointer
FILE:/afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/TGenericClassInf
o.h
LINE:28
*** Interpreter error recovered ***

However, when I type in ROOT:

.L Chamber.cxx+
#include "Chamber.cxx"

I do not get any errors, and the class works fine. Why is this the case?
It would be nice to just work around it, but I fear that this will affect
compiled code.

Below are my (shortened) header, implementation, and link files for the
class Chamber. Thank you in advance for your help.

Chris Hayward


Chamber.h:

#ifndef CHAMBER_INCLUDED    //check if the header has already been loaded
#define CHAMBER_INCLUDED    //if not, set CHAMBER_INCLUDED and proceed

#include <iostream.h>
#include
</afs/cern.ch/sw/root/v3.05.06/rh73_gcc296/root/include/TObject.h>
//#include "TObject.h"    //TObject is necessary to inherit ROOT I/O
#include <string.h>

class TDirectory;       //needed by ROOT

class Chamber:public TObject {   //Chamber inherits from TObject

//class Chamber {

  public:

    Chamber() {};  //default constructor
    ~Chamber() {};

//variables and member functions defined here


  ClassDef (Chamber, 4);   //a class to store data about MDT chambers
};

#endif //CHAMBER_INCLUDED



Chamber.cxx:

#include "Chamber.h"
ClassImp (Chamber);


Chamber_LinkDef.h:

#ifdef __CINT__

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

#pragma link C++ class Chamber+;

#endif   //__CINT__



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