JHB의 프로그래밍 삽질기

[MFC] Class 에서 static 멤버 변수 사용하기 본문

PROGRAMMING/C C++ MFC

[MFC] Class 에서 static 멤버 변수 사용하기

roter 2010.10.20 16:12

보통 mfc는 선언부 파일(*.h)과 구현부 파일(*.cpp)을 나누어 놓는다.
선언부 class에서 static 멤버 변수를 선언하고 구현부에서 사용하려고 하면 Link시점에 에러가 난다.

예를 들어 다음과 같은 소스가 있다고 해보자

StaticSample.h (선언부)
//StaticSample.h

class CStaticSample
{

private:
    static int m_nNumofClass;

public:
    CStaticSample(void);
    ~CStaticSample(void);
    static int GetNumofClass(void);
};


StaticSample.cpp (구현부)
//StaticSample.cpp
#include "StaticSample.h"

CStaticSample::CStaticSample(void)
{
	m_nNumofClass++;
}

CStaticSample::~CStaticSample(void)
{
}

int CStaticSample::GetNumofClass(void)
{
	return m_nNumofClass;
}



이 소스는 컴파일 하면 에러가 날 것이다.
error LNK2001: unresolved external symbol "private: static int CStaticSample::m_nNumofClass" (?m_nNumofClass@CStaticSample@@0HA)
라는 에러가 난다.

이를 해결 하기 위해선 구현부에 static 변수에 대한 선언이 한 번 더 이루어 져야 한다.
위의 경우는

int CStaticSample::m_nNumofClass;

와 같이 이루어 진다.
바뀐 구현부 소스를 보면

//StaticSample.cpp
#include "StaticSample.h"

int CStaticSample::m_nNumofClass;

CStaticSample::CStaticSample(void)
{
    m_nNumofClass++;
}

CStaticSample::~CStaticSample(void)
{
}

int CStaticSample::GetNumofClass(void)
{
    return m_nNumofClass;
}


이처럼 해주면 된다.
0 Comments
댓글쓰기 폼