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파일에서 실제 정의를 통해 메모리에 생성하는 것이다.
이 정의를 하지 않았기 때문에 오류가 발생했던 것이었다.