错误C2011:“ sockaddr”:“ struct”类型重新定义。参见“ sockaddr”的声明

Cro*_*oll 2 c++ sockets windows static-linking visual-studio-2012

我使用Visual Studio 2012,并尝试使静态库UDT正常工作。不幸的是,我无法编译将UDT库链接到其自身的项目,我在Windows SDK标头中遇到有关类型或宏重新定义的159个奇怪的错误。

c:\program files\windows kits\8.0\include\shared\ws2def.h(96): warning C4005: 'AF_IPX' : macro redefinition 2> c:\program files\windows kits\8.0\include\um\winsock.h(452) : see previous definition of 'AF_IPX' 2>c:\program files\windows kits\8.0\include\shared\ws2def.h(136): warning C4005: 'AF_MAX' : macro redefinition 2> c:\program files\windows kits\8.0\include\um\winsock.h(471) : see previous definition of 'AF_MAX' 2>c:\program files\windows kits\8.0\include\shared\ws2def.h(173): warning C4005: 'SO_DONTLINGER' : macro redefinition 2> c:\program files\windows kits\8.0\include\um\winsock.h(394) : see previous definition of 'SO_DONTLINGER' 2>c:\program files\windows kits\8.0\include\shared\ws2def.h(217): error C2011: 'sockaddr' : 'struct' type redefinition 2> c:\program files\windows kits\8.0\include\um\winsock.h(477) : see declaration of 'sockaddr'

以前删除了一些为每个UDT函数定义dllexport / dllimport的代码:

#define UDT_API // no dllimport/export
Run Code Online (Sandbox Code Playgroud)

我检查了该库是否始终使用#ifdef来检查文件是否已包含在内。而这个错误:

windows kits\8.0\include\um\ws2tcpip.h(703): error C3861: 'WSASetLastError': identifier not found

可能是const该表达式中的关键字(在udt内的某个地方):

UDT_API int bind(UDTSOCKET u, const struct sockaddr* name, int namelen);
Run Code Online (Sandbox Code Playgroud)

我遗失了什么?

Wer*_*nze 7

如果包含winsock.h和winsock2.h,请确保首先包含winsock2.h。如果包含不是很明显,则可以检查是否使用/ P编译的 cpp文件,并逐步浏览生成的预处理器输出文件。