tags:

views:

154

answers:

1

I have a class which has a static const array, it has to be initialized outside the class:

class foo{  
static const int array[3];  
};    
const int foo::array[3] = { 1, 2, 3 };

But then I get a duplicate symbol foo::array in foo.o and main.o foo.o hold the foo class, and main.o holds main() and uses instances of foo.
How can I share this static const array between all instances of foo? I mean, that's the idea of a static member.

+6  A: 

Initialize it in your corresponding .cpp file not your .h file.

When you #include it's a pre-processor directive that basically copies the file verbatim into the location of the #include. So you are initializing it twice by including it in 2 different compilation units.

The linker sees 2 and doesn't know which one to use. If you had only initialized it in one of the source files, only one .o would contain it and you wouldn't have a problem.

Brian R. Bondy
Yes, right. Thanks! I keep making this dumb errors with header files and getting linker errors.
Petruza
I had a question regarding this - Why don't header guards resolve the problem? -- Thanks, Sid.
Sid