C++ 套接字错误可以';t在WinSock2.h中获取函数
我已经创建了一个套接字包装类,但是我有太多的错误,我无法解决。我试了又试,但没有用 代码如下:C++ 套接字错误可以';t在WinSock2.h中获取函数,c++,c,windows,sockets,C++,C,Windows,Sockets,我已经创建了一个套接字包装类,但是我有太多的错误,我无法解决。我试了又试,但没有用 代码如下: //#define WIN32_LEAN_AND_MEAN #include <iostream> #include <string> #include <Windows.h> #include <WinSock2.h> #include <WS2tcpip.h> #pragma comment(lib,"ws2_32_lib") usin
//#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <string>
#include <Windows.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib,"ws2_32_lib")
using namespace std;
#define WM_SOCKET 0x10000
class Socket
{
};
您需要按如下方式重新排列Windows标题的包含项:
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <Windows.h>
在包含WinSock2之前不能包含Windows.h,因为这将导致Windows标头包含旧版本的winsock。拆下车窗。h包括所有车窗 例如,请参见此MSDN链接: 第一个代码块下的注释部分解释了这一点。我确保在任何#include“windows.h”和#include“Winsock.h”之前有一个#include“Winsock2.h”,这就解决了这个问题 耐心一点,逐个查看includes并建立顺序,首先包括“Winsock2.h”,然后包括“windows.h”
我检查了recursive includes,我发现头文件包含(递归地)一些#include“windows.h”和#include“Winsock.h”,并编写了一个#include“Winsock2.h”。在这个文件中,我添加了#include“Winsock2.h”`作为第一个include。如果事先定义了
\u WINSOCKAPI
,可以在Winsock2.h
之前包含windows.h
。这将禁用默认情况下包含的winsock.h
。@RemyLebeau:您知道该定义是否为“可移植”(即在所有版本的SDK中相同)吗?。MSDN页面上说您可以定义WIN32\u LEAN\u和_MEAN
,但这并不总是一个选项。无论如何,我认为最好让Winsock2包含windows标题。是的,所有SDK版本中的定义都是相同的。它是头保护,用于保护winsock.h
的内容不受多个包含项的影响winsock2.h
定义了\u WINSOCKAPI
以禁用winsock.h
如果在包含winsock.h
之前包含winock2.h
,以避免多个声明错误winsock2.h
不包括windows标题。在我的例子中,我只是在任何地方都包括WS2TCIP.h(其他两个文件不包括在内,因为它们都包含在这个文件中)。但对于许多函数,我仍然会遇到重新定义错误。大多数函数都在#if INCL_WINSOCK_API_prototype块下声明,该块定义为1。你能给我一些建议吗?谢谢你的帮助!在我的例子中,我只是到处都包含ws2tcip.h
(其他两个文件不包括在内,因为它们都包含在这个文件中)。但对于许多函数,我仍然会得到重新定义错误。这些函数大部分在定义为1的#if INCL_WINSOCK_API_prototype
块下声明。你能给我一些建议吗?谢谢你的帮助!一个空的C++文件只有两行<代码> >包括和 >包含给了我很多错误(VS2005)。第一条错误消息是错误1错误C2146:语法错误:缺少“;”在标识符“Byte”之前,C:\Program Files\Microsoft SDK\Windows\v6.0\Include\in6addr.h 24在\Include
和\Include
之间有\Include
修复了这个问题。在我的例子中,我只是到处都包含ws2tcpp.h(其他两个文件不包括在内,因为它们在这一个文件的内部).但我仍然得到许多函数的重新定义错误。大多数函数都在#if INCL_WINSOCK_API_prototype块下声明,该块定义为1。你能给我一些建议吗?谢谢你的帮助!
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <Windows.h>
#pragma comment(lib,"ws2_32")