ACLiC problem with simple class

Hi,

I’ve got some problems with using ACLiC. I reduced the problem to this test-case:

class Test{
public:
  double (*mTest)[2];
};

When I try to load this class with ACLiC in ROOT 5.26, I get the following error.

root [4] .L testcint.C+
Info in <TUnixSystem::ACLiC>: creating shared library /scratch/softdevel/miniww/./testcint_C.so
/scratch/softdevel/miniww/./testcint_C_ACLiC_dict.cxx:40: error: size of array ‘mTest’ is too large
/scratch/softdevel/miniww/./testcint_C_ACLiC_dict.cxx: In function ‘void ROOT::Test_ShowMembers(void*, TMemberInspector&, char*)’:
/scratch/softdevel/miniww/./testcint_C_ACLiC_dict.cxx:102: error: ‘class ROOT::Shadow::Test’ has no member named ‘mTest’
g++: /scratch/softdevel/miniww/./testcint_C_ACLiC_dict.o: No such file or directory
Error in <ACLiC>: Compilation failed!

Because the Problem seems to be related to the dictionaries, I tried to disable the dictionary for this class by adding

#ifdef __MAKECINT__
#pragma link off class Test;
#endif

At the end of the file, however the error message stays the same. How do I disable the dictionary creation for a class in ACLiC?

Cheers, J.

Hi,

it’s a parser error, and CINT will still parse your file when loaded via ACLiC. You can hide it from CINT using
#ifndef CINT
double (mTest)[2];
#else
void
mTest[2];
#endif

As you see I’d suggest to replace mTest’s type with a type of same size for CINT.

Cheers, Axel.