C++ Static Member Variable Initialization 静态成员变量初始化

静态变量需要在.cpp初始化,否则报错连接错误,

对于原始数据, int, double, …

simple.h

class Simple{public:    Simple(void);    ~Simple(void);    static int GetInt(void);private:    static int _i;};

simple.cpp

int Simple::GetInt(void){    return _i;}

连接出错:

error LNK2001: unresolved external symbol "private: static int Simple::_i" (?_i@Simple@@0HA)需要在.cpp文件中初始化静态成员变量,初始化跟所在位置无关

int Simple::GetInt(void){    return _i;}int Simple::_i = 0;


对于数组静态变量,头文件可以如下声明

static int _i[10];

或者不指定对应数组长度

static int _i[]

.cpp文件可以如下初始化:

int Simple::_i[10] = {0};

对于STL容器静态变量,初始化方法比较复杂,需要借助一个静态构造函数,通过拷贝构造函数来实现初始化simple.h定义为:

#include <map>using namespace std;typedef map<int, int> INT2INT;class Simple{public:    Simple(void);    ~Simple(void);    static bool Find(int key);private:    static INT2INT CreateMap(void);    static INT2INT _i;};

simple.cpp定义为:

bool Simple::Find(int key){    INT2INT::iterator it = _i.find(key);    if (it == _i.end())        return false;    return true;}INT2INT Simple::CreateMap(void){    INT2INT _tmp;    return _tmp;}INT2INT Simple::_i(Simple::CreateMap());










原文链接: https://www.cnblogs.com/rogerroddick/archive/2013/03/15/2961812.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/80701

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午7:41
下一篇 2023年2月9日 下午7:41

相关推荐