10

我正在用 Visual C++ 2010 编译一个项目,但我遇到了一些 Winsock 重新定义的问题。

首先我得到:

syntax error : identifier 'SOCKADDR_STORAGE'

但是,如果我包含 winsock 或 winsock2 或 ws2tcpip 我会收到许多类似以下的错误:

error C2011: 'sockaddr' : 'struct' type redefinition 
error C2011: 'WSAData' : 'struct' type redefinition
error C2011: 'linger' : 'struct' type redefinition
4

1 回答 1

24

你的问题是,通过包含Windows.h,你也已经包含了winsock.h。正是在这里,您的问题出现了,因为包括winsock2.hws2tcpip.h将尝试重新定义winsock.h

通过在包含#define WIN32_LEAN_AND_MEAN之前使用,您Windows.h可以阻止编译器包含许多附带的额外内容Windows.h

于 2012-07-15T21:10:36.363 回答