[aspectc-user] multiple definition errors for "global" variables

Olaf Spinczyk Olaf.Spinczyk at informatik.uni-erlangen.de
Wed Feb 2 16:13:41 CET 2005


Hello Hans,

Hans VB wrote:
> Hello,
> 
> I'm writing a logging aspect which logs to a textfile.
> Therefore in my .ah-file I have to define :
> 
> ofstream logfile("test.log");
> 
> For convenience I define this 'global' in the aspect (i.e. before the 
> definition of the aspect LoggingAspect { ... }; )
> This works fine when the advice code only needs to be triggered from one 
> .cpp-file. When I need advice for code scattered across multiple 
> .cpp-files (multiple classes) everything weaves fine, but during linking 
> i get an error from g++ :
> 
> multiple definition of _logfile
> 
> I don't think this is intended behaviour ?
> 
> 
> I managed to work around this by using
> ofstream logfile("test.log",ios::app);
> in every piece of advice-code.
> 
> Greets,
> Hans

the reason is that aspect headers are automatically included in all 
translation units, which are affected by the aspect. You would have the 
same results if you defined the ofstream in a normal header file, which 
you include in more than one cpp file.

The solution is to create a "LoggingAspect.cpp" file, which defines your 
ofstream logfile("test.log") and includes the aspect header explicitely. 
In the aspect header you only have an extern declaration:extern ofstream 
logfile;

Olaf



More information about the aspectc-user mailing list