2010-02-27 3 views
0

나는 내 프로젝트에 ZipArchive 라이브러리를 구현하고 있으며, 한 시간 이상 그것을 준비하여 모든 링커 오류를 막을 수있었습니다. 하지만 지금은 여전히이 문제가 남아 있으며 문제를 해결하기위한 최선의 방법이 확실하지 않아 도움이 될 수 있습니다.클래스 템플릿이 이미 정의 된 문제를 해결하려면 어떻게해야합니까?

C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxtls_.h(199) : error C2953: 'CThreadLocal' : class template has already been defined 
c:\dev-mms\hl2sdk-ob-valve\public\tier0/threadtools.h(283) : see declaration of 'CThreadLocal' 
C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxtls_.h(202) : warning C4005: 'THREAD_LOCAL' : macro redefinition 
c:\dev-mms\hl2sdk-ob-valve\public\tier0/threadtools.h(71) : see previous definition of 'THREAD_LOCAL' 
+1

당신이 부분을 게시 할 수 문제의 원인이되는 코드는 무엇입니까? – suszterpatt

+0

다른 스타일로 교차 게시 할 때 명시 적으로 언급하는 것이 좋은 스타일입니다 (http://forums.steampowered.com/forums/showthread.php?p=13710128). –

답변

2

MS 'ATL/MFC 헤더와 HL2 SDK는 모두 클래스 템플릿 CThreadLocal을 포함합니다.

올바른 순서 (즉, ATL/MFC 헤더가 포함 된 헤더)의 올바른 순서로 HL2 SDK 헤더를 포함 시키려면 HL2 SDK가 #ifndef __AFXTLS_H__을 통해 해당 문제를 처리해야합니다.

+0

http://ampaste.net/m3b514e46 그 밖의 헤더보다 #include 를 이동하면 #error가 발생합니다. ("tchar.h 앞에 tier0 유형 헤더가 있어야합니다. ") 나는 헤더를 재구성하는 모든 조합을 시도해 봤지만 둘 중 하나를 얻는다. –

+0

테스트를 거치지 않고 정확한 순서가 필요한지 말할 수 없으며 HL2SDK도 zip-archive-thing도 설치되어 있지 않습니다. hackish 해결 방법은'#define __AFXTLS_H__'과'#undef __AFXTLS_H__'로 HL2 include를 둘러싸는 것입니다. 또 다른 접근법은 단순히 헤더를 섞어서는 안된다는 것입니다. 즉 다른 소스 파일에 zip-stuff 래퍼를 구현하는 것입니다. –

3

C++ 템플릿 힌트 :

  • 모든 헤더 파일에 있어야합니다 (.H)
  • 단지에 코드를 넣어 재정을 해결하기 :
 
#ifndef __MY_CODE_eg 
#define __MY_CODE_eg 

     // your code 
     // here. 

#endif 
+1

다시 정의하지 않으려면 "#ifndef"대신 "#pragma once"를 사용하십시오. #ifndef에서 고유 한 이름을 선택하지 않아도 타이핑이 적고 안정적입니다. – Contango

관련 문제