STL容器[30]
index.cpp:59: in-class initialization of static data member of non-integral type `const string'
index.cpp:60: in-class initialization of static data member of non-integral type `const string'
index.cpp:61: in-class initialization of static data member of non-integral type `const string'
A common mistake is to initialize static class members inside the constructor body or a member-initialization list like this:
class File
{
private:
static bool locked;
private:
File();
//
};
File::File(): locked(false) {} //error, static initialization in a member initialization list
Although compilers flag these ill-formed initializations as errors, programmers often wonder why this is an error. Bear in mind that a constructor is called as many times as the number of objects created, whereas a static data member may be initialized only once because it is shared by all the class objects. Therefore, you should initialize static members outside the class, as in this example:
class File
{
private:
static bool locked;
private:
File() { /*..*/}
//
};
File::locked = false; //correct initialization of a non-const static member
Alternatively, for const static members of an integral type, the Standard now allows in-class initialization:
class Screen
{
private:
const static int pixels = 768*1024; //in-class initialization of const static integral types
public:
Screen() {/*..*/}
//
};