C++

Visual Studio - LNK2001 에러

게임만드는학생 2023. 9. 2. 00:27

 

위 처럼 LNK2001 에러가 발생하는 이유는 링크과정에서의 문제가 발생하기 때문이다. 

 

여러 이유가 있다.

 

1. 헤더파일에 함수선언을 했지만 cpp파일에서 함수정의를 하지 않는 경우다. 

 

2. static변수를 클래스 내부에 선언했는데 클래스 외부에서 정의하지 않은 경우다. 

 

내 코드의 경우 2번 문제였다. 

 

GameManager.h

class GameManager
{
private:
	GameManager() { chracter = nullptr; }
	static GameManager* _instance;

	//CharacterType chType;
	Character* chracter;

GameManager 클래스에 _instance 변수를 static으로 선언했다. 

그런데 cpp파일에서 정의하지 않아서 오류가 발생하였다. 

 

GameManager.cpp

GameManager* GameManager::_instance = nullptr;

이렇게 클래스 외부에서 정의가 필요하다. 

 

왜냐하면 C++ 에서 static 변수는 객체기반이 아니라 클래스 기반으로 생성되기 때문이다.

 

클래스 내부에 static GameManager* _instance; 코드는 단순히 컴파일러에 알려주기만 하고 메모리에 존재하지는 않는다. 

때문에 cpp파일에서 실제 정의를 통해 메모리에 생성하는 것이다. 

이 정의를 하지 않았기 때문에 오류가 발생했던 것이었다.