Petruza
Petruza

Reputation: 12276

static const C++ class member initialized gives a duplicate symbol error when linking

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.

Upvotes: 2

Views: 5073

Answers (1)

Brian R. Bondy
Brian R. Bondy

Reputation: 347216

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.

Upvotes: 10

Related Questions