我遇到了一个问题,就是无法同时包含两个文件。 现在,我知道我需要先包含Winsock2,然后是windows.h,或直接使用以下方式:
#define WIN32_LEAN_AND_MEAN
但是,我仍然有一些问题
我有一个名为XS.h
的头文件,看起来像这样
#ifndef XS_H
#define XS_H
#include <winsock2.h>
#include <ws2tcpip.h>
#include <Windows.h>
#endif
我在头文件Client.h
中包含了XS.h
。
Client.h
的引用如下:#ifndef CLIENT_H
#define CLIENT_H
#include "XS.h"
XS.h
是我在Client.h
中唯一的包含文件,但我仍然会遇到错误(并且正如您所看到的,在windows.h
之前已经包含了Winsock
)。
我得到了大约78个错误,以下是其中的一些:
Error 90 error C3861: 'WSASetLastError': identifier not found c:\program files (x86)\windows kits\8.0\include\um\ws2tcpip.h 703
Error 61 error C2375: 'WSAStartup' : redefinition; different linkage c:\program files (x86)\windows kits\8.0\include\um\winsock2.h 2296
Error 49 error C2375: 'send' : redefinition; different linkage c:\program files (x86)\windows kits\8.0\include\um\winsock2.h 2026
我该如何解决这个问题?
谢谢!
编辑:我尝试使用#define _WINSOCKAPI_
,但它并没有解决我的问题......
我先包含了winsock.h
,然后是windows.h
,但它仍然对我产生错误。
#pragma once
。 - A BClient.h
的包含更改为以下内容:`#pragma once#include <winsock2.h>#include <ws2tcpip.h> #include "Chat.h"`但仍然无法正常工作,出现相同的错误... - Amitwindows.h
。这是因为Microsoft头文件通常不包括它们所需的所有内容,即不遵循良好的编程实践。可以将<windows.h>
强制包含,但这会重复导致问题的不良做法:最好修复源代码。 - Cheers and hth. - Alf