C + + Static Member Variable Initialization 정적 구성원 변수 초기 화

3504 단어 C++STLinitialization
STL 정적 변수 가 이렇게 번 거 로 운 것 을 초기 화 하 는 구나.
원문:http://www.cnblogs.com/rogerroddick/archive/2013/03/15/2961812.html
정적 변 수 는. 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());

좋은 웹페이지 즐겨찾기