9월, 2011의 게시물 표시

error LNK2019

error LNK2019: "public: bool __thiscall GameState::State::IsInit(void)const " (?IsInit@State@GameState@@QBE_NXZ) 외부 기호(참조 위치: "public: virtual void __thiscall GameState::GameStateManager::Terminate(void)" (?Terminate@GameStateManager@GameState@@UAEXXZ) 함수)에서 확인하지 못했습니다.

흔히 error LNK2019는 정말 해당 함수등을 제대로 정의나 선언을 못하거나 혹은 참조를 못했을 때 발생합니다만, 아무리 살펴봐도 잘 되있는데도 링크에러가 발생하더군요.

프로젝트를 리펙토링 하던 과정에서 FSM의 State 클래스와 GameState의 State 클래스가 있었는데 리팩토링 전에는 다른 모듈에 있어서 잘 되었지만 프로젝트를 합치면서 중간 build 파일인 obj 파일이 같은 이름이라 충돌이 일어나더군요.

그래서 namespace FSM과 namespace GameState로 namespace를 써가면서 사용해 왔었는데도 무용지물이네요. 같은 프로젝트 안에는 파일명이 같은 건 없도록 해서 해결했습니다.

error C2243: '형식 캐스팅' ... 변환이 있지만 액세스할 수 없습니다.

error C2243: '형식 캐스팅' : 에서 (으)로의 변환이 있지만 액세스할 수 없습니다.

라는 에러메세지는 클래스 상속부분에서 발생합니다.

class B : A
{
...
};

이런식으로 혹여나 public등을 빼먹고 상속을 하지 않았는지 확인합니다. public가 빠지고 클래스명만으로 상속 처리를 하게되면 기본적으로 private로 되서 에러가 발생한 듯합니다.