解決error C2011: 'fd_set' : 'struct' type redefinition的方法


首先說明這個問題由於重復定義引起的編譯錯誤。

先說明解決方法,然后再說是什么原因導致了這個問題。

 

解決方法:

下列任何一種方法都可以。

1. 在所有包含windows.h的代碼之前加上

#define  WIN32_LEAN_AND_MEAN


2. 或者直接在工程的properties( vc6 以上)/Setting(vc6) -> c/c++ -> preprocessor 中添加WIN32_LEAN_AND_MEAN

 

 

問題根由:

因為windows.h中包含了<winsock.h>,這個是早期版本(windows socket 1.1)的windows socket 的頭文件,而當你自己的文件中因使用最新版本windows socket的函數,需要包含 winsock2.h。而這兩個版本都定義fd_set一系列的結構和函數,所以就出現這樣的問題。

 

好,我們看下windows.h的定義,其實看一下這個定義就知道導致問題的原因和解決問題的方法:

#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#ifndef _MAC
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#endif
#include <shellapi.h>
#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif
#ifndef NOCRYPT
#include <wincrypt.h>
#include <winefs.h>
#include <winscard.h>
#endif

 

注意查看我加粗的兩行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM