3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)包含<windows.h>before 時(shí),會(huì)導(dǎo)致此問(wèn)題<winsock2.h>。嘗試排列<windows.h>包含在其后的包含列表,<winsock2.h>或_WINSOCKAPI_首先定義:
#define _WINSOCKAPI_ // stops windows.h including winsock.h
#include <windows.h>
// ...
#include "MyClass.h" // Which includes <winsock2.h>

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如其他人所建議的那樣,問(wèn)題是在windows.h
之前包含了WinSock2.h
。因?yàn)?code>windows.h包含winsock.h
。您不能同時(shí)使用WinSock2.h
和winsock.h
。
解決方案:
WinSock2.h
在之前包括windows.h
。如果是預(yù)編譯頭文件,則應(yīng)在此處解決。在簡(jiǎn)單項(xiàng)目的情況下,這很容易。但是,在大型項(xiàng)目中(尤其是在編寫(xiě)可移植代碼而沒(méi)有預(yù)編譯的標(biāo)頭的情況下),這可能會(huì)非常困難,因?yàn)楫?dāng)WinSock2.h
包含標(biāo)頭時(shí),windows.h
可以從其他標(biāo)頭/實(shí)現(xiàn)文件中包含標(biāo)頭。定義
WIN32_LEAN_AND_MEAN
之前windows.h
或項(xiàng)目范圍。但是它將排除您可能需要的許多其他內(nèi)容,因此您應(yīng)該自己添加。定義
_WINSOCKAPI_
之前windows.h
或項(xiàng)目范圍。但是當(dāng)您包含WinSock2.h
它時(shí),您會(huì)收到宏重新定義警告。對(duì)于您的項(xiàng)目來(lái)說(shuō),使用
windows.h
而不是WinSock2.h
什么時(shí)候winsock.h
就足夠了(在大多數(shù)情況下是)。這可能會(huì)導(dǎo)致更長(zhǎng)的編譯時(shí)間,但可以解決所有錯(cuò)誤/警告。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
通過(guò)使用“標(biāo)題保護(hù)”:
#ifndef MYCLASS_H
#define MYCLASS_H
// This is unnecessary, see comments.
//#pragma once
// MyClass.h
#include <winsock2.h>
class MyClass
{
// methods
public:
MyClass(unsigned short port);
virtual ~MyClass(void);
};
#endif
- 3 回答
- 0 關(guān)注
- 1319 瀏覽
添加回答
舉報(bào)