Hi,
This is a problem similar to the one reported by David Morrison (see
http://root.cern.ch/root/roottalk/roottalk02/3696.html).
In your case, it is the template list<...> and allocator which is
instantiation has a side effect of:
#pragma link C++ class ObjectProcessor<PhysicsObject>;
We are trying to figure out a better solution (than forcing the
instantiation and/or explicitly linking off the side effects.
Cheers,
Philippe.
-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Roger Moore
Sent: Wednesday, August 21, 2002 3:30 PM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] rootcint, STL and missing streamers
Using ROOT v3.05.00 I've noticed a strange problem when using templated
classes containing STL vectors. Unless rootcint is passed a class which
inherits from the template using the specified parameter.
In my case the LinkDef.h file containing the lines:
#pragma link C++ class PhysicsObject;
#pragma link C++ class ObjectProcessor<PhysicsObject>;
Where 'ObjectProcessor' is a template class containing an STL list
pointers of the type of the template parameter (i.e. std::list<T*>).
This generates the following ROOTCINT errors:
Class allocator<PhysicsObject*>: Streamer() not declared
Class allocator<PhysicsObject*>: ShowMembers() not declared
Class allocator<PhysicsObject*>: Class_Name() and initialization object
not declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >: Streamer() not
declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >: ShowMembers() not
declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >: Class_Name() and
initialization object not declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >::iterator:
Streamer() not declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >::iterator:
ShowMembers() not declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >::reverse_iterator:
Streamer() not declared
Class list<PhysicsObject*,allocator<PhysicsObject*> >::reverse_iterator:
ShowMembers() not declared
However if I add the line:
class Dummy001 : public ObjectProcessor<PhysicsObject> { };
at the start of the LinkDef.h file then all these errors go away.
Similarly I have to include this line for each instance of the template
that I want to create.
This seems to be a bug...
Roger
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:08 MET