LNK2001 에러 없애는법 !



error LNK2001: "~~~" (? ~ @ ~ @@ ~ ) 외부 기호를 확인할 수 없습니다.

error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.



간혹 클래스 내부에 static 변수를 선언했을때 발생하는 오류입니다

왜 저런 에러가 뜨냐면, 해당하는 스태틱변수를 찾을 수 없기 때문입니다.



///////// A.h //////////


class A

{

private:

static int a;

public:

A();

}



//////// A.cpp ///////////


A::A()

{

a = 10;

}


이렇게 하면 위의 박스 에러가 뜹니다. 


정적변수 static을 사용하였을 때는

클래스 내부에 선언을 해주면 정의가 필요한데, 이 정의는 클래스 외부에서 정의가 되어야합니다





///////// A.h //////////


class A

{

private:

static int a;

public:

A();

}



//////// A.cpp ///////////


int A::a = 10;


A::A()

{

//a = 10;

}



요렇게!




왜 이렇게 해줘야 하냐면

C++ 에서 static 변수는 객체기반이 아니라, 클래스 기반으로 생성되기 때문입니다


그래서 클래스 내부에 선언을 해놓으면, 메모리(데이터영역)에 이 변수가 할당이 되고,

이 클래스 기반으로 만들어진 객체들이 이 변수를 공유합니다.



만약에,

static 변수를 클래스 내부에 선언하고 생성자 내에서 초기화를 해준다고 하면

객체가 생성될때마다 리셋되어버립니다.

그래서 잘못된것..!






참고)

static 변수는 전역변수의 성질도 가지고있기때문에

main 함수에 들어가기 전에 할당이 됩니다.

컴파일 단계때, 번역을 하면서 클래스 내부에 static 변수가 있으면

먼저 할당하라고 명령문으로 적습니다.






해당 게시물은 아래 링크 게시물을

본인이 빨리 찾아볼 수 있도록 정리한 것입니다.

http://egloos.zum.com/kaludin/v/2461942