C,C++/Error & Warning
[C++] LNK2001, LNK1120 링크 오류 (static 관련)
woohyeon
2020. 2. 4. 12:24
반응형
다음과 같이 클래스 내부에 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;
}