Program Language/C & C++
[C++] error LNK2001: unresolved external symbol (Static member)
야곰야곰+책벌레
2021. 10. 7. 13:23
728x90
반응형
클래스에서 static 멤버 함수는 곧잘 사용하고 있어서 갑작스러운 에러에 갈피를 잡지 못했다.
하지만 멤버 변수의 경우는 함수와 다르다. 반드시 명시적인 선언이 추가적으로 필요하다.
class C
{
private:
static int a;
public:
C() { a = 1; }
void print() { cout << a << endl; }
};
단순 선언만 하면 컴파일 에러가 발생하지 않지만, a에 접근하려는 코드가 생길 경우 링크 에러가 발생한다.
class C
{
private:
static int a;
public:
C() { a = 1; }
void print() { cout << a << endl; }
};
int main()
{
C c;
c.print();
return 0;
}
그렇기 때문에, 아래와 같이 static int a는 다시 한번 선언해줘야 한다.
class C
{
private:
static int a;
public:
C() { a = 1; }
void print() { cout << a << endl; }
};
int C::a; // static 멤버 변수를 위한 선언
int main()
{
C c;
c.print();
return 0;
}
728x90
반응형