以下错误来自仅包含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命令将其输入到注册表中。不知道从哪里去,欣赏任何建议。 。 。
答案 0 :(得分:2)
windows.h包含winsock.h,它与winsock2.h包含文件冲突。 在包含windows.h之前,通过定义 WINSOCKAPI 来阻止第一次包含:
#define _WINSOCKAPI_
#include "windows.h"
#include "winsock2.h"
答案 1 :(得分:2)
你应该按照IulianŞerbănoiu的建议将winsock2.h放在windows.h之前
#include <winsock2.h>
#include <windows.h>
你也可以使用精益和平均值:
#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文件(这取决于您使用的IDE,例如Visual Studio?)
在Visual Studio中,转到Project&gt;属性&gt;链接器&gt;其他包括(或类似的东西,目前不在Visual Studio的计算机上......)这也在上面的链接中描述。
答案 2 :(得分:1)
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
使用此避免编译错误