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
반응형

'Program Language > C & C++' 카테고리의 다른 글

[C++] packaged_task  (2) 2021.10.07
[C++] thread_local  (0) 2021.10.07
[C++] recursive_mutex  (0) 2021.10.07
[C++] result_of  (0) 2021.10.06
[C++] Callable  (0) 2021.10.06