Hello, I'm new to ROOT and I'm having problems in reading the tree I created and it looks like I am having problems with seeing a class that is inside another class. Here is an example program I was playing with to test this. File SClass.h -------------------------------------------------------------------------------------------- #include <iostream> #include "TObject.h" using namespace std; class SInnerClass : public TObject { private: Float_t fXX; Float_t fYY; public: SInnerClass() {fXX = fYY = -2;} void Print() const; ClassDef (SInnerClass,1) }; class SClass : public TObject { private: Float_t fX; Float_t fY; SInnerClass junk; public: SClass() {fX = fY = -1;} void Print() const; ClassDef (SClass,1) }; ------------------------------------------------------------------------------------------------- File SClass.cpp ------------------------------------------------------------------------------------------------- #include "SClass.h" ClassImp (SClass); ClassImp (SInnerClass); void SClass::Print() const { cout << "fX = " << fX << ", fY = " << fY << endl; }; void SInnerClass::Print() const { cout << "fXX = " << fXX << ", fYY = " << fYY << endl; }; ------------------------------------------------------------------------------------------------ File LinkDef.h ------------------------------------------------------------------------------------------------ #ifdef __CINT__ #pragma link off all globals; #pragma link off all classes; #pragma link off all functions; #pragma link C++ class SInnerClass+; #pragma link C++ class SClass+; ------------------------------------------------------------------------------------------------ I compile this to give me a shared library and run this in root using this makefile ------------------------------------------------------------------------------------------------- ARCH = linuxdeb CXX = ObjSuf = o SrcSuf = cxx ExeSuf = DllSuf = so OutPutOpt = -o ROOTCFLAGS := $(shell root-config --cflags) ROOTLIBS := $(shell root-config --libs) ROOTGLIBS := $(shell root-config --glibs) CXX = g++ CXXFLAGS = -O -Wall -fPIC LD = g++ LDFLAGS = -O SOFLAGS = -shared CXXFLAGS += $(ROOTCFLAGS) LIBS = $(ROOTLIBS) $(SYSLIBS) GLIBS = $(ROOTGLIBS) $(SYSLIBS) SCLASSO = SClass.$(ObjSuf) SClassDict.$(ObjSuf) SCLASSS = SClass.$(SrcSuf) SClassDict.$(SrcSuf) SCLASSSO = libSClass.$(DllSuf) SCLASS = SClass$(ExeSuf) SCLASSLIB = $(SCLASSSO) OBJS = $(SCLASSO) PROGRAMS = $(SCLASS) .SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf) $(SCLASSSO): $(SCLASSO) $(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ @echo "$@ done" SClassDict.$(SrcSuf): SClass.h LinkDef.h @echo "Generation dictonary $@..." @rootcint -f $@ -c $^ .$(SrcSuf).$(ObjSuf): $(CXX) $(CXXFLAGS) -c $< --------------------------------------------------------------------------------------------- In root I type this root [0] .L libSClass.so root [1] SClass *test2 = new SClass; root [2] test2->Print(); fX = -1, fY = -1 root [3] test2->junk.Print(); Error: Symbol test2 is not defined in current scope FILE:(tmpfile) LINE:1 Error: Failed to evaluate test2->junkError: Failed to evaluate test2->junk.Print()Possible candidates are... filename line:size busy function type and name *** Interpreter error recovered *** How do you define a class inside a class so you can use it in root? I'm using Root Version 3.05/04 running on debian linux Thanks Mark -- ****************************************************** Mark Wallace Research Assistant Michigan State University National Superconducting Cyclotron Laboratory East Lansing, MI 48824-1321 e-mail wallace@nscl.msu.edu ******************************************************
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET