티스토리 뷰


보통 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;
}


이처럼 해주면 된다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함