rootcint problem

From: Rutger van der Eijk (r36@nikhef.nl)
Date: Wed Jun 03 1998 - 18:05:45 MEST


Hi,

I'm experiencing strange problems with rootcint. Adding one (empty!) line
to a certain header file removes/enables rootcint to work inproperly. I'm
wondering if this is due to the fact my ClassDef statements are NOT at the
end of a class declaration. Is this required?

The header file causing the problem is included. In the state this file
is in now at compilation time the by rootcint generate dictionary
(OTTDict.C) gives the following error messages:

---------------
GENERATING OBJECT FILE ...
aCC -c -g +Z -I/group/bfys/bfys/stage/root/include -I/user/r36/include
/user/r36/work/lhcb/ott/src/new/OTTDict.C -o
/user/r36/work/lhcb/ott/obj/OTTDict.o
Error 226: "/user/r36/work/lhcb/ott/src/new/OTTDict.C", line 6762 # No
    appropriate function found for call of 'operator >>'. Last viable
    candidate was "TBuffer &operator >>(TBuffer &,TStorage *&)"
    ["/group/bfys/bfys/stage/root/include/TStorage.h", line 65]. Argument
of
    type 'TFile *' could not be converted to 'TStorage *&'.
          R__b >> fSpyFile;
          ^^^^^^^^^^^^^^^^ 
Error 226: "/user/r36/work/lhcb/ott/src/new/OTTDict.C", line 6763 # No
    appropriate function found for call of 'operator >>'. Last viable
    candidate was "TBuffer &operator >>(TBuffer &,TStorage *&)"
    ["/group/bfys/bfys/stage/root/include/TStorage.h", line 65]. Argument
of
    type 'TTree *' could not be converted to 'TStorage *&'.
          R__b >> fSpyTree;
          ^^^^^^^^^^^^^^^^ 
Error 226: "/user/r36/work/lhcb/ott/src/new/OTTDict.C", line 6766 # No
    appropriate function found for call of 'operator >>'. Last viable
    candidate was "TBuffer &operator >>(TBuffer &,TStorage *&)"
    ["/group/bfys/bfys/stage/root/include/TStorage.h", line 65]. Argument
of
    type 'TServerSocket *' could not be converted to 'TStorage *&'.
          R__b >> fServerSocket;
          ^^^^^^^^^^^^^^^^^^^^^ 
Error 226: "/user/r36/work/lhcb/ott/src/new/OTTDict.C", line 6779 # No
    appropriate function found for call of 'operator <<'. Last viable
    candidate was "TBuffer &operator <<(TBuffer &,const TObject *)"
    ["/group/bfys/bfys/stage/root/include/TBuffer.h", line 335]. Argument
of
    type 'TFile *' could not be converted to 'const TObject *'.
          R__b << fSpyFile;
          ^^^^^^^^^^^^^^^^ 
Error 226: "/user/r36/work/lhcb/ott/src/new/OTTDict.C", line 6780 # No
    appropriate function found for call of 'operator <<'. Last viable
    candidate was "TBuffer &operator <<(TBuffer &,const TObject *)"
    ["/group/bfys/bfys/stage/root/include/TBuffer.h", line 335]. Argument
of
    type 'TTree *' could not be converted to 'const TObject *'.
          R__b << fSpyTree;
          ^^^^^^^^^^^^^^^^ 
Error 226: "/user/r36/work/lhcb/ott/src/new/OTTDict.C", line 6783 # No
    appropriate function found for call of 'operator <<'. Last viable
    candidate was "TBuffer &operator <<(TBuffer &,const TObject *)"
    ["/group/bfys/bfys/stage/root/include/TBuffer.h", line 335]. Argument
of
    type 'TServerSocket *' could not be converted to 'const TObject *'.
          R__b << fServerSocket;
          ^^^^^^^^^^^^^^^^^^^^^ 
gmake: *** [/user/r36/work/lhcb/ott/obj/OTTDict.o] Error 2
-------------------

Looking at the dictionary I rootcint created a complete streamer for the
OTRCM class which it should not do (ClassDef(OTRCM, 0!!!  )). As said
adding just an empty line (for example after the class OTRawEvetn;
statement, solves the problem.

Am I doing something wrong?

Rutger




#ifndef _OTRCM_H_
#define _OTRCM_H_
//
// This File contains the declaration of the OTRCM-class
//
// C++ code for 'LHC-B Outer Tracker Testbeam Monitoring + Analyses'
//
//   Author: Rutger van der Eijk
//   Version: V1.1.2 (03-06-98)

#ifndef ROOT_TObject
#include "TObject.h"
#endif

class TServerSocket;
class TSocket;
class OTLowLevelDAQ;
class OTRunSettings;
class OTMonitoringSettings;
class OTHistogrammer;
class OTUpdateHistogrammerTimer;
class OTUpdateRCMTimer;
class TFile;
class TTree;
class OTRawEvent;


class OTRCM: public TObject {
public:
  // ...
  OTRCM(UInt_t port);
  virtual ~OTRCM();
  virtual void Print(Option_t *option = "");

  void Run();
  Bool_t Update();

  ClassDef(OTRCM, 0) // OTRCM class
private:
  //
  Bool_t fServerShutdown; // kTRUE if OTRCM should be shutdown
  OTUpdateRCMTimer *fRCMUpdateTimer; // timer to update RCM

  // Run datamembers
  Bool_t fRunActive; // kTRUE if a run is active.
  OTLowLevelDAQ *fDAQ; // pointer to low level DAQ
  OTRunSettings *fRunSettings; // Run settings
  OTMonitoringSettings *fMonSettings; // (online) monitoring settings
  OTHistogrammer *fHistogrammer; // (online) monitoring histogrammer
  OTUpdateHistogrammerTimer *fHistoUpdateTimer; // timer to update histogrammer

  // Spy related datamembers
  Bool_t fGetSpy; // kTRUE if spy should be taken
  TFile *fSpyFile; // SpyData file
  TTree *fSpyTree; // SpyData tree
  OTRawEvent *fSpyEvent; // pointer to last spy event
  ULong_t fNSpyBytes; // # bytes SpyData processed

  // TSocket based members
  void StartRun(TSocket *s);
  void StopRun(TSocket *s);
  void GetRunStatistics(TSocket *s);
  void GetLastSpyEvent(TSocket *s);
  TServerSocket *fServerSocket; //pointer to server socket
};


#endif // _OTRCM_H_



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:33 MET