Hi,
Thanks for reporting this problem. There was a problem in the case where
the base class had a ClassDef but did not inherit from TObject.
The fix will be uploaded shortly in CVS.
Cheers,
Philippe.
-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Alessandro Thea
Sent: Wednesday, June 16, 2004 2:04 AM
To: roottalk
Subject: [ROOT] Rootcint (again) and std::vectors of abstract classes
Hi again rooters,
I encountered another problem with rootcint and a vector of pointers of
an abstract class:
I use two classes, SimuModuleFactory and SimuModule described at the end
of this mail.
In few words, SimuModuleFactory holds fModules, a std::vector of
SimuModule pointers.
SimuModule is an abstract class.
rootcint doesn't complain generating dictionary but while compiling the
shared library, g++ throws the following error:
/home/thea/work/esaf/tmp/ESAFTMP.thea/i686/simuframework/G___simuframeworkDict.cc:
In
function `void ROOT::stl_streamer_vectorlESimuModulemUgR(TBuffer&,
void*)':
/home/thea/work/esaf/tmp/ESAFTMP.thea/i686/simuframework/G___simuframeworkDict.cc:465:
cannot
allocate an object of type `SimuModule'
/home/thea/work/esaf/tmp/ESAFTMP.thea/i686/simuframework/G___simuframeworkDict.cc:465:
because the following virtual functions are abstract:
include/SimuModule.hh:32: virtual bool SimuModule::Init()
include/SimuModule.hh:35: virtual bool SimuModule::PreProcess()
include/SimuModule.hh:38: virtual bool SimuModule::Process()
include/SimuModule.hh:41: virtual bool SimuModule::PostProcess()
include/SimuModule.hh:44: virtual bool SimuModule::Done()
I can make g++ compile hiding fModules.
#ifndef __MAKECINT__ // FIXME
vector<SimuModule*> fModules;
#endif /* __MAKECINT__*/
or making SimuModule not-abstract
I would like to find a way around to include fModules in the dictionary
keeping SimuModule abstract.
Do you think it would be possible? Do you have any suggestion?
By the way, thank to all root team for you ready support and advices.
Alessandro
class SimuModule : public EusoConfigurable {
public:
SimuModule( const string& );
virtual ~SimuModule();
inline const string& GetName() const { return fName; }
virtual bool Init() = 0;
virtual bool PreProcess() = 0;
virtual bool Process() = 0;
virtual bool PostProcess() = 0;
virtual bool Done() = 0;
virtual void UserMemoryClean() {}
public:
EusoConfigClass(Simu,SimuModule)
private:
string fName;
ClassDef(SimuModule,1)
};
class SimuModuleFactory {
public:
// ctor
SimuModuleFactory(const string&);
// dtor
virtual ~SimuModuleFactory();
// get modules: NULL when all modules are done
SimuModule *GetModule();
private:
// physically build the modules
void MakeModule(const string& mName);
void MakeSequence(const string& mName);
// modules and sequences
vector<SimuModule*> fModules;
// current module counter used in Get()
size_t fCurrent;
ClassDef(SimuModuleFactory,1)
};
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:08 MET