Contents Up << >>
Why are classes with static data members getting linker errors?
Static data members must be explicitly defined in exactly one module. E.g.,
class Fred {
public:
//...
private:
static int i_; //declares static data member "Fred::i_"
//...
};
The linker will holler at you ("Fred::i_ is not defined") unless you
define (as opposed to declare) Fred::i_ in (exactly) one of your source files:
int Fred::i_ = some_expression_evaluating_to_an_int;
or:
int Fred::i_;
The usual place to define static data members of class "Fred" is file
"Fred.C" (or "Fred.cpp", etc; whatever filename extension you use).