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());


 
 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM