I'm reading Scott Meyers' C++ and come across this example:
class GamePlayer{
private:
    static const int NumTurns = 5;
    int scores[NumTurns];
    // ...
};
What you see above is a declaration for
NumTurns, not a definition.
Why not a definition? It looks like we initialize the static data member with 5.
I just don't understand what it means to declare but not define a variable with the value 5. We can take the address of the variable fine.
class A
{
public:
    void foo(){ const int * p = &a; }
private:
    static const int a = 1;
};
int main ()
{
    A a;
    a.foo();
}
				
                        
Because it isn't a definition. Static data members must be defined outside the class definition.
[class.static.data] / 2
As for taking the address of your static member without actually defining it, it will compile, but it shouldn't link.