RE: [ROOT] Limitation: cannot instantiate precompiled template .....

From: Philippe Canal (pcanal@fnal.gov)
Date: Mon Jan 26 2004 - 16:55:42 MET


Hi,

>  When I try to read it back in with a macro, though, I get

  Limitation: Can't instantiate precompiled template 
  vector<int,allocator<int> > FILE:doit.C LINE:11

This should NOT be happening if you loaded your library.
If you did NOT load you library (and hence got a bunch of
message of missing dictionary for BaseLeft, BaseRight, etc.),
this is normal and should be fixed in 4.00/01.

Cheers,
Philippe.

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Troy Straszheim
Sent: Sunday, January 25, 2004 3:28 PM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] Limitation: cannot instantiate precompiled template
.....


Greetings roottalk --

Thanks a million for the hint on plotting an stl vector.  It works like 
a charm, has helped a lot.

I'm still working on building the most generic interface possible 
between our internals and ROOT, and I have started to get an 
intermittent error which I think may pop up only when I instantiate 
templates in certain ways.

I have two base classes:

class BaseLeft { vector<int> v; }

and

class BaseRight { vector<int> v; }

and then a child class that inherits from both

class Child : public BaseLeft, public BaseRight { vector<float>, etc };

which also contains a vector of ints, a vector of floats and some other 
stuff.   No vectors of vectors or anything like that.

This class "Child", is given as the argument to a template class that 
inherits from TObject:

template <class T>
RootContainer : public TObject { ... };

and in my RootContainerLinkDef.h I have all the instantiations

#pragma link C++ class RootContainer<Child>+;
#pragma link C++ class Child+;
and then the others, in order, are BaseLeft, BaseRight, vector<int>, and 
vector<float>.

I branch the Child inside the RootContainer and write it to a TTree 
inside a TFile:  works fine.  When I try to read it back in with a 
macro, though, I get

Limitation: Can't instantiate precompiled template 
vector<int,allocator<int> > FILE:doit.C LINE:11

The strange thing is that this worked a minute ago, and I cannot figure 
out what I have changed.  Any hints?  I am thinking that it may have 
something to do with the order of the pragmas in RootContainerLinkDef.h. 
  How does root handle precompiled and non-precompiled templates?

Best,

Troy Straszheim



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET