寫了一個完成端口模型的小程序,編譯運行跳出來一大堆重定義的錯誤,網上查一些資料是因爲windows.h和WinSock2.h的包含關係。
將WinSock2.h寫在windows.h前,問題就解決了。這兩個頭文件的包含關係不僅僅影響到直接包含兩者的文件,還會影響到間接包含兩者的情形。比如:a.h包含了windows.h,b.h包含了winsock2.h,如果在c.h中要引用a.h和b.h,那麼a.h應該在b.h之前。這種順序問題一般很難發現究竟是哪兩個文件之間發生了順序錯誤,所以極端解決方式就是在所有的#include前都加上#include<WinSock2.h>和#include<windows.h>。
另外,網上還看到另一種解決方式:定義宏WIN32_LEAN_AND_MEAN
屬性》配置屬性》c/c++》預處理器》預處理器定義:添加WIN32_LEAN_AND_MEAN