2015-08-26 108 views
6

我正在嘗試使用VS2015(C++控制檯應用程序)創建一個UDP組播套接字程序。winsock不推薦使用警告

我有以下錯誤,

Error C4996 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings mulitcast_listener 

我試圖通過 「工程」 符號添加_WINSOCK_DEPRECATED_NO_WARNINGS到我的項目設置 - > 「屬性」 - > 「配置屬性」 - > 「C/C++」 - >「預處理器」 - >「預處理器定義」 ..但它仍然表示相同。

然後我試圖添加上述#包括符號 「stdafx.h中」

的#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

然後否(/ sdl-)上「項目「 - >」屬性「 - >」配置屬性「 - >」C/C++「 - >常規 - > SDL檢查

現在我收到一條錯誤消息,說

Warning C4603 '_WINSOCK_DEPRECATED_NO_WARNINGS': macro is not defined or definition is different after precompiled header 

最後,我試圖執行的

inet_pton(AF_INET, HELLO_GROUP, (PVOID *)(&mreq.imr_multiaddr.s_addr)); 

代替

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP); 

我需要了解爲什麼沒有得到解決的錯誤,甚至添加_WINSOCK後...宏。

在此先感謝。

+1

關於在'stdafx.h'之前添加'#define',你可能沒有意識到這一點:https://en.wikipedia.org/wiki/Precompiled_header#stdafx.h。 '#include「stdafx.h」'應該是第一件事。如果在包含stdafx之後但在所有其他包含之前放置'#define',會發生什麼? –

+0

它建立成功..非常感謝你的這些信息 – kar

回答

7

正如評論指出的,解決的辦法是,以確保該行

#define _WINSOCK_DEPRECATED_NO_WARNINGS 

放置後

#include "stdafx.h" 

但其他#include語句之前。

+1

這對我有用。 – nomnom

1

儘管以前的建議有效,但它忽略了stdafx.h的用途。這個想法是,你爲stdafx.h內部頻率不變的的頭文件放置#include語句,以便使用預編譯頭文件。因此,你應該把理想

#define _WINSOCK_DEPCRECATED 

stdafx.h,先於其他#include語句,它影響,特別是包括winsock2.h或其他的Winsock相關的報頭之前。

相關問題