Re: FW: Reading back a vector from a file

From: Rene Brun <Rene.Brun_at_cern.ch>
Date: Wed, 13 May 2009 12:44:34 +0200


The vector.size function was implemented only in version 5.23/04. Move to this version or compile your Macro.C with ACLIC.

Rene Brun

Marc de Kamps wrote:
>
> Hi,
>
> I’m using the following macro to read in an object of SimulationInfoBlock:
>
> #include <vector>
>
> void Macro()
>
> {
>
> gROOT->ProcessLine(".L Id.cpp+");
>
> gROOT->ProcessLine(".L CircuitInfo.cpp+");
>
> gROOT->ProcessLine(".L RootLayerDescription.cpp+");
>
> gROOT->ProcessLine(".L RootLayeredNetDescription.cpp+");
>
> gROOT->ProcessLine(".L SimulationInfoBlock.cpp+");
>
> TFile* p_file = new TFile("simulationorganizersmalldirect.root");
>
> SimulationInfoBlock* p_block =
> (SimulationInfoBlock*)p_file->Get("simulationorganizersmalldirect");
>
> cout << p_block->Name() << endl;
>
> std::vector<CircuitInfo> vec_info = p_block->InfoVector();
>
> cout << vec_info.size() << endl;
>
> }
>
> I’ve created the file simulationorganizersmalldirect.root by a stand
> alone program and would like to make sure that the information
> generated can be read and analyzed in CINT sessions.
>
> I get the following error:
>
> root [0] .L Macro.cpp
>
> root [1] Macro()
>
> simulationorganizersmalldirect
>
> Error: Can't call vector<CircuitInfo,allocator<CircuitInfo> >::size()
> in current scope Macro.cpp:18:
>
> Possible candidates are...
>
> (in vector<CircuitInfo,allocator<CircuitInfo> >)
>
> (class G__CINT_ENDL)28780720
>
> *** Interpreter error recovered ***
>
> root [2]
>
> Any idea as to what the problem might be? I’m puzzled because reading
> in the object from the file seems to work.
>
> I have attached the class definitions used in SimulationInfoBlock. I
> also included the LinkDef.h used to generate the dictionary for the
> stand alone program. I use root 5.22/00.
>
> Thanks,
>
> Marc
>
> ---------------------------SimulationInfoBlock----------------------------
>
> class SimulationInfoBlock : public TNamed
>
> {
>
> public:
>
> ClassDef(SimulationInfoBlock,1);
>
> // Necessary for ROOT I/O
>
> SimulationInfoBlock();
>
> SimulationInfoBlock
>
> (
>
> const SimulationInfoBlock&
>
> );
>
> SimulationInfoBlock
>
> (
>
> const TString&,
>
> const RootLayeredNetDescription&,
>
> const std::vector<CircuitInfo>&
>
> );
>
> TString Name() const;
>
> const vector<CircuitInfo>
>
> InfoVector() const;
>
> const RootLayeredNetDescription
>
> DescriptionVector() const;
>
> private:
>
> TString _name;
>
> RootLayeredNetDescription _desc;
>
> std::vector<CircuitInfo> _info;
>
> }; // end of Id
>
> ----------------LinkDef.h-----------------------------
>
> #include <vector>
>
> #pragma link C++ class Id+;
>
> //#pragma link C++ class NetId+;
>
> #pragma link C++ class CircuitInfo+;
>
> #pragma link C++ class WeightedLink<double>+;
>
> #pragma link C++ class std::vector<CircuitInfo>+;
>
> #pragma link C++ class RootLayerDescription+;
>
> #pragma link C++ class std::vector<RootLayerDescription>+;
>
> #pragma link C++ class RootLayeredNetDescription+;
>
> #pragma link C++ class SimulationInfoBlock+;
>
> #pragma link C++ class std::vector<SimulationInfoBlock>+;
>
> #pragma link C++ class SimulationInfoBlockVector;
>
> Dr. Marc de Kamps
>
> Biosystems Group
>
> School of Computing
>
> University of Leeds
>
> LS29JT, Leeds, UK
>
> dekamps_at_comp.leeds.ac.uk <mailto:dekamps_at_comp.leeds.ac.uk>
>
> http:/www.comp.leeds.ac.uk/dekamps
>
Received on Wed May 13 2009 - 12:45:09 CEST

This archive was generated by hypermail 2.2.0 : Wed May 13 2009 - 23:50:02 CEST