以下错误来自仅包含 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命令输入到注册表中。真的不知道从哪里开始,感谢任何建议。 . .
最佳答案
windows.h 包含 winsock.h,它与 winsock2.h 包含文件发生冲突。
通过在包含 windows.h 之前定义 WINSOCKAPI 来防止第一次包含:
:
#define _WINSOCKAPI_
#include "windows.h"
#include "winsock2.h"
关于c - winsock编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3059141/