Ошибки переопределения в WinSock2.h
Включая winsock2.h, в файл проекта.
Получение многих ошибок в
WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
с соответствующим -
WinSock.h(54) : see declaration of 'fd_set'
Я не вижу winsock.h, который включен в любой из заголовков.
Есть ли какие-либо настройки в проекте, которые могут быть причиной этого?
ИЗМЕНИТЬ
Тем не менее, я использую windows.h в другом файле:
http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html
РЕДАКТИРОВАТЬ 2
В заголовке у меня есть:
#include <winsock2.h>
#include <iphlpapi.h>
#include "\MyFiles\FileX.h" <-which #include <windows.h>
Ответы
Ответ 1
Мое образованное предположение - это порядок включенных заголовков, т.е. сначала включить winsock2.h
(с первым значением перед windows.h
), или определить WIN32_LEAN_AND_MEAN, прежде чем включать windows.h
, что предотвращает включение windows.h из winsock v1.
#include <winsock2.h>
#include <windows.h>
-или -
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
Ответ 2
После некоторой головной боли: я убедился, что #include "Winsock2.h"
находится перед любыми #include "windows.h"
и "#include "Winsock.h"
, и это разрешило случай.
Я проверил рекурсивное включение, я заметил файлы заголовков, которые включают (рекурсивно) некоторые #include "windows.h"
и "#include "Winsock.h"
и пишут #include "Winsock2.h"
. в этих файлах я добавил #include "Winsock2.h"
в качестве первого include.
Просто терпение, посмотрите, включите один за другим и установите этот порядок, сначала #include "Winsock2.h"
, затем #include "windows.h"