본문 바로가기
C,C++/Error & Warning

[C++] LNK2001, LNK1120 링크 오류 (static 관련)

by woohyeon 2020. 2. 4.
반응형

 

다음과 같이 클래스 내부에 static 멤버 변수를 선언하고 static 멤버 함수 내에서 사용하는데 계속 위와 같은 링크 에러가 발생하였다.

// A.h

class A
{
public:
 static void Func();
  ....
private:
 static int num;
};


// A.cpp

void A::Func()
{
   num = 5;
}


링크 에러는 뭔가 서로 연결해주지 못해서 발생하는 에러인데, 일단 static 변수는 프로그램 시작하고 클래스 개체 생성 전에 메모리에 올라가기 때문에 static 함수에서만 사용 가능하다는 건 알 것이다. 그래서 나는 그냥 static 변수면 static 함수에서 바로 사용할 수 있는 줄 알았다. (내 기억으론 자바에선 그렇게 썼던 것 같았는데)

근데 찾아보니 클래스 내에 static 변수를 선언하는 것만으로는 메모리가 할당되지 않는다고 한다. 클래스 내에 static 변수를 선언해주고 클래스 외부에서 아래와 같이 정의를 해주어야 사용할 수 있다고 한다. 

헤더는 동일하다.

// A.cpp

int A::num = 0;  // 따로 정의를 해주어야 사용 가능.
void A::Func()
{
   num = 5;
}

 




댓글