ошибка повторения структуры при компиляции кода C WinSock в visual studio 2010 - PullRequest
0 голосов
/ 27 июня 2011

Я пытался скомпилировать исходный код C в Visual Studio 2010. Во время компиляции я получаю некоторые ошибки, такие как:

  1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(4277): error C2040: 'CONTEXT' : '_CONTEXT' differs in levels of indirection from 'binding *'
  1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winuser.h(5341): error C2365: 'INPUT' : redefinition; previous definition was 'enumerator'
  1>c:\documents and settings\xyz\desktop\abc\clause.h(72) : see declaration of 'INPUT'
  1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\sys/time.h(16): error C2011: 'timeval' : 'struct' type redefinition
  1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\WinSock2.h(176) : see declaration of 'timeval'

Я искал эту ошибку, но некоторые намеки на то, что это связано с изменением порядка заголовочных файлов. Но не смог получить точный ответ. Могу ли я узнать, как я могу преодолеть эту проблему?

Ниже приведен порядок включений файла заголовка.

 #include <WinSock2.h>  
 #include <Windows.h>
 #include <stdio.h>

Заранее спасибо.

1 Ответ

2 голосов
/ 28 июня 2011

См. здесь - если вы явно включите windows.h в winsock2.h, вы должны добавить #define WIN32_LEAN_AND_MEAN, чтобы сделать эту работу.

По историческим причинам Windows.h заголовок по умолчанию включает в себя Заголовочный файл Winsock.h для Windows Розетки 1.1. Декларации в Заголовочный файл Winsock.h будет конфликтовать с заявлениями в Заголовочный файл Winsock2.h требуется Windows Sockets 2.0. Макрос WIN32_LEAN_AND_MEAN предотвращает включение Winsock.h в заголовок Windows.h.

...