Hi,
Currently by default ROOT (and cint) do not know about the class vector<int>
(especially the compiled form).
In order to properly use your class, currently you need to use a linkdef file
like:
x.h <<END
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class x;
#pragma link C++ class vector<int>!-;
#endif
END
change you makefile to call:
> @rootcint -f ${DICT}.cxx -c ${DHDRS} xlinkdef.h
Philippe.
> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
> [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matevz Tadel
> Sent: Tuesday, August 08, 2000 8:21 AM
> To: roottalk@pcroot.cern.ch
> Subject: [ROOT] stl members
>
>
> Hi,
>
> I have a stl-container member in a class:
> x.h <<END
> #ifndef _x_h_
> #define _x_h_
>
> #include <TObject.h>
> #include <vector>
>
> class x : public TObject{
> public:
> vector<int> mV;
>
> ClassDef(x,1)
> };
>
> #endif
> END
>
> x.cxx <<END
> #include "x.h"
> ClassImp(x)
> END
>
> doing the rootcint, compile and link routine ...
> excrept from makefile <<END
> all: dict lib
>
> %.o: %.cxx
> ${CXX} ${CPPFLAGS} -c -o $@ ${CXXFLAGS} $<
>
> ${DICT}.cxx: ${DHDRS}
> @echo "Generating dictionary ..."
> @rootcint -f ${DICT}.cxx -c ${DHDRS}
>
> dict: ${DICT}.cxx
>
> lib: ${DOBJS}
> ${LD} -shared -o ${OUTLIB} ${DOBJS} ${ROOTLIBS}
> END
>
> root session:
> root [0] #include <vector>
> root [1] gSystem->Load("xdict.so")
> root [2] x y
> root [3] y.mV.push_back(3)
> Error: Can't call vector<int,__malloc_alloc_template<0> >::push_back(3) in
> current scope FILE:/tmp/fileIZc85C_cint LINE:1
> Possible candidates are...
> filename line:size busy function type and name (in
> vector<int,__malloc_alloc_template<0> >)
> *** Interpreter error recovered ***
>
> shouldn't this work?
>
> thanks ...
> cheers,
> matevz
>
> --
> ---------------------------------------------------
> Matevz Tadel, E-mail: Matevz.Tadel@ijs.si
> Department of Experimental High Energy Physics F9
> Jozef Stefan Institute, Jamova 39, P.o.Box 3000
> SI-1001 Ljubljana, Slovenia
> Tel.: +386-61-177-3674 Fax: +386-61-125-7074
> ---------------------------------------------------
>
>
>
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:31 MET