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).