static variable in the class declaration or definition?

Whoami picture Whoami · Jun 24, 2012 · Viewed 7.5k times · Source

I am new to C++.
I have a class like this:

class CodeTest
{
private:
    static const int TOTAL=100;
};

Is TOTAL a declaration or a definition?

When I was reading Scott Meyer's book, it was mentioned that in the implementation file we need to define something like:

const int CodeTest::TOTAL;

Why is this required?

Answer

Konrad Rudolph picture Konrad Rudolph · Jun 24, 2012

The declaration in an implementation file outside of the header is required because otherwise every translation unit that includes this header would define its own object (that is, its own storage for the variable).

This would violate the One Definition Rule. A consequence would be e.g. that if the variable was changed in one translation unit, this change would be invisible to other translation units. Now, this isn’t that relevant since the variable is constant. However, taking its address would also yield different pointers in different translation units.