Как исправить шаблон класса, который уже был определен? - PullRequest
0 голосов
/ 27 февраля 2010

Я внедряю библиотеку 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'

Ответы [ 2 ]

3 голосов
/ 04 декабря 2010

C ++ Шаблоны подсказок:

  • ВСЕ должно быть в заголовочном файле (.h)
  • Чтобы решить переопределение, просто введите ваш код в:
#ifndef __MY_CODE_eg
#define __MY_CODE_eg

      // your code
      // here.

#endif
2 голосов
/ 27 февраля 2010

Как заголовки MS 'ATL / MFC, так и HL2 SDK содержат шаблон класса CThreadLocal.

Если вы включите их в правильном порядке, то есть сначала в заголовки ATL / MFC (или заголовки, которые их включают), затем в заголовки HL2 SDK, то HL2 SDK должен решить эту проблему с помощью #ifndef __AFXTLS_H__.

...