error LNK2005가 또 날 괴롭히는구나

프로그래머들이 제일 싫어라 하는게 아마도 링크에러지 싶습니다. 그게 아까 저에게 찾아와서 저를 막 괴롭히더군요. 30분넘게 씨름한 끝에 해결은 했습니다.

총 3개의 모듈과 1개의 exe로 구성된 솔루션인데요. 2번째 모듈에서 링크 경고를 뿜어주시더군요.


2>Image.obj : warning LNK4006: "public: __thiscall Core::RefCount::RefCount(void)" (??0RefCount@Core@@QAE@XZ)이(가) RenderDevice.obj에 이미 정의되어 있습니다. 초 정의가 무시됩니다.

뭐 일단 경고라서 그냥 넘어가고 쭉 컴파일이 됩니다. 근데 왠걸.. 마지막 실행파일놈이 링크에러를 뿜더군요.


4>1MakApp.obj : error LNK2005: "public: __thiscall Core::RefCount::RefCount(void)" (??0RefCount@Core@@QAE@XZ)이(가) 1Mak.obj에 이미 정의되어 있습니다.
4>application.lib(AppBase.obj) : error LNK2005: "public: __thiscall Core::RefCount::RefCount(void)" (??0RefCount@Core@@QAE@XZ)이(가) 1Mak.obj에 이미 정의되어 있습니다.4>driver.lib(RenderDevice.obj) : error LNK2005: "public: __thiscall Core::RefCount::RefCount(void)" (??0RefCount@Core@@QAE@XZ)이(가) 1Mak.obj에 이미 정의되어 있습니다.
4>C:\MyProject\Debug\1Mak.exe : fatal error LNK1169: 여러 번 정의된 기호가 있습니다.
========== 모두 다시 빌드: 성공 3, 실패 1, 생략 0 ==========

아놔 승질나게 시리! ㅋ; 보아하니 참조카운터 클래스가 말썽을 일으키는 듯 하여 살펴봤더니 별 이상한 점을 못 찾겠더군요.


#pragma once
namespace Core
{
class RefCount
{
public:
RefCount();


//protected:
///< 레퍼런스 카운트 증가
void AddRef();
///< 레퍼런스 카운트 감소
void Release();


protected:
int refCount;
};


RefCount::RefCount()
:

refCount( 0 )
{


}

inline void
RefCount::AddRef()
{
++this->refCount;
}

inline void
RefCount::Release()
{
if( --this->refCount <= 0 )
delete this;
}
}

왜 자꾸 생성자가 이미 정의되있다고 난리인가 싶어 이리저리 주석도 달아보고 하던중 클래스 밖에서 생성자를 정의안하고 클래스 안에 바로 처리해 주면 잘 되더군요. 아니면 다른 멤버함수처럼 inline을 해주면 잘 됩니다.

아 아직 한참 짧은 제 지식의 한계를 느끼기도 하고 말이죠...

이 블로그의 인기 게시물

CMake Windows에 설치하기

Unity3D Prime31 처럼 자신만의 안드로이드 플러그인을 만들어보자

Unity3D iOS Plugin 만들어 연동하기