Why are classes with static data members getting linker errors?
Because static data members must be explicitly defined in exactly one compilation unit. If you didn't do this, you'll probably get an "undefined external" linker error. For example:
// Fred.h class Fred { public: ... private: static int j_; // Declares static data member Fred::j_ ... };The linker will holler at you ( "Fred::j_ is not defined") unless you define (as opposed to merely declare) Fred::j_ in (exactly) one of your source files:
// Fred.cpp #include "Fred.h" int Fred::j_ = some_expression_evaluating_to_an_int; // Alternatively, if you wish to use the implicit 0 value for static ints: // int Fred::j_;The usual place to define static data members of class Fred is file Fred.cpp (or Fred.C or whatever source file extension you use).

解释了静态数据成员必须在恰好一个编译单元中显式定义的原因,并提供了避免链接错误的方法。

1万+

被折叠的 条评论
为什么被折叠?



