Re: No dictionaries for std::complex

From: Marcelo Zimbres <mzimbres_at_gmail.com>
Date: Mon, 21 May 2012 16:02:27 -0300


Hi Phillipe,

I make no use of TApplication, it is just a main function linked to a library of mine and to root libraries. Just out of curiosity, when I use

rootcint -f dictionary.cxx -c TAlm.cxx

to generate dictionaries for a class TAlm, which has a data member std::complex. does its dictionary go into dictionary.cxx? If not, where are the dictionaries loaded from?

Cheers,
Marcelo

2012/5/21 Philippe Canal <pcanal_at_fnal.gov>

> Hi,
>
> Humm ... yes if the autoloader is properly initialized it should load the
> complex dictionary automatically.
> Did you create a TApplication object in your standalone example?
>
> Cheers,
> Philippe.
>
>
> On 5/21/12 11:27 AM, Marcelo Zimbres wrote:
>
> Thanks Philippe,
>
> it seems then, that I have the right implementation, but anyway, I
> thought this was fixed due to the following post:
> http://root.cern.ch/phpBB3/viewtopic.php?f=5&t=9618, where you mention:
>
> "Hi,
>
> The ProcessLine call is only needed to work around a bug in the library
> autoloading setting affecting only the std::complex classes (This is fixed
> in the trunk, revision 36617 and up).
>
> Cheers,
> Philippe. "
>
> Maybe I misunderstood it? It is not clear to me when should I manually
> enforce a dictionary should be loaded.
>
> Cheers,
> Marcelo
>
>
>
> 2012/5/21 Philippe Canal <pcanal_at_fnal.gov>
>
>> > but if I try the same on a standalone application,
>> > I get the error:
>>
>> In standalone application, you need to more configuration 'by hand'.
>> In particular
>> you may have to load more dictionary explicitly. For example:
>>
>>
>> gROOT->ProcessLine("#include <complex>");
>>
>> will force the loading of the pre-canned std::complex dictionary.
>>
>> Cheers,
>> Philippe.
>>
>>
>> On 5/19/12 9:54 PM, Marcelo Zimbres wrote:
>>
>> Hi Root experts,
>>
>> I have a class which inherits from TNamed, with a std::complex<double>
>> data member.
>> When I compile it on Cint (.L TAlm.cxx+) and try to write an object of
>> this class to
>> a root file, everything goes fine, but if I try the same on a standalone
>> application,
>> I get the error:
>>
>> Error in <TAlm::fAlm streamer>: Missing the TClass object for
>> complex<double>
>>
>> even though, my executable is linked to the library where the dictionary
>> for TAlm should be
>> (I use rootcint to generate dictionaries in this case and put them in the
>> library). To fix
>> the problem I am adding
>>
>> gROOT->ProcessLine("#include <complex>");
>>
>> in the main function, but I suppose this is not the right way to do it?
>> Why my program does find the dictionary for std::complex?
>>
>> Thanks in advance,
>> Marcelo
>>
>>
>
Received on Mon May 21 2012 - 21:02:38 CEST

This archive was generated by hypermail 2.2.0 : Mon May 21 2012 - 23:50:02 CEST