반응형
다음과 같이 클래스 내부에 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;
}
'C,C++ > Error & Warning' 카테고리의 다른 글
LNK 1104: cannot open file ~~~ for writing (0) | 2020.09.07 |
---|---|
[C++] 함수 템플릿 특수화 관련 링크 에러 | LNK1169, LNK2005 (0) | 2020.03.02 |
[C++] C2572 컴파일러 오류. redefinition of default argument (0) | 2020.01.11 |
[C++] LNK2019, LNK1120 클래스 템플릿 사용 시 링크 오류 (0) | 2019.11.28 |
[C++] typename 키워드 | C2760, C7510 (0) | 2019.11.25 |
댓글