以下错误来自仅包含windows和winsock2的文件。
C:\Users\ioil\Desktop\dm\bin>dmc sockit.c
typedef struct fd_set {
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(85) : Error: 'fd_set' is already defined
} fd_set;
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(88) : Error: identifier or '( declarator )' expected
struct timeval {
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(129) : Error: 'timeval' is already defined
};
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(132) : Error: identifier or '( declarator )' expected
struct hostent {
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(185) : Error: 'hostent' is already defined
Fatal error: too many errors
--- errorlevel 1
C:\Users\ioil\Desktop\dm\bin>已经尝试过的方法:将winsock.dll文件放置在与要编译的编译器和程序相同的目录中,将其放置在system32目录中,然后使用regsrv32命令将其输入注册表。我真的不知道下一步该怎么做,谢谢你的建议。。。
发布于 2010-06-17 13:46:02
windows.h包含winsock.h,它与winsock2.h包含文件冲突。通过在包含windows.h之前定义WINSOCKAPI来防止第一个包含:
#define _WINSOCKAPI_
#include "windows.h"
#include "winsock2.h"发布于 2010-06-17 17:24:54
您应该按照IulianŞerbănoiu的建议将winsock2.h放在windows.h之前。
#include <winsock2.h>
#include <windows.h>您还可以使用lean和mean宏:
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>原因在msdn上描述:Creating a Basic Winsock Application
还要确保将程序链接到WS2_32.lib文件(这取决于您使用的集成开发环境,例如Visual Studio?)
在Visual Studio中,您可以转到Project > Properties > Linker > Additional includes (或类似的内容,此时不是在装有visual studio的计算机上)。上面的链接中也描述了这一点。
发布于 2011-02-22 14:24:17
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")使用此选项可避免编译错误
https://stackoverflow.com/questions/3059141
复制相似问题