您的位置:首页 > 其它

Why are classes with static data members getting linker errors?

2013-07-17 14:32 671 查看
http://www.parashift.com/c++-faq-lite/link-errs-static-data-mems.html

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).
Note: in
some cases, you can add = initializer; to the declaration of class-scope static declarations, however if you ever use the data member,
you still need to explicitly define it in exactly one compilation unit. In this case you don't include an = initializer in the definition. A
separate FAQ covers this topic.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: