2015-08-26 13 views
6

Sto provando a creare un programma socket multicast UDP utilizzando VS2015 (applicazione console C++).winsock deprecato senza avvisi

ho ottenuto il seguente errore,

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

Ho provato ad aggiungere _WINSOCK_DEPRECATED_NO_WARNINGS simbolo per le mie impostazioni di progetto tramite "Progetto" -> "Proprietà" -> "Proprietà di configurazione" -> "C/C++" - > "Preprocessore" -> "Definizioni preprocessore" .. Ma continua a dire lo stesso.

E poi ho provato ad aggiungere simbolo sopra # include "stdafx.h" come

# define _WINSOCK_DEPRECATED_NO_WARNINGS 1

e poi No (/ sdl-) su "Progetto "->" Proprietà "->" Proprietà di configurazione "->" C/C++ "-> Generale-> Controlli SDL

ora ricevo un messaggio di errore che indica

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

Alla fine ho cercato di attuare

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

invece di

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP); 

ho bisogno di capire il motivo per cui l'errore non ha risolto anche dopo l'aggiunta del _WINSOCK ... macro.

Grazie in anticipo.

+1

Per quanto riguarda l'aggiunta di '# define' prima di' stdafx.h', potresti non essere a conoscenza di questo: https://en.wikipedia.org/wiki/Precompiled_header#stdafx.h. '#include" stdafx.h "' dovrebbe essere la prima cosa. Cosa succede se posizioni '# define' subito dopo aver incluso stdafx ma prima che tutti gli altri includano? –

+0

Costruisce con successo .. Grazie mille per queste informazioni – kar

risposta

7

Come notato nei commenti, la soluzione è quella di fare in modo che la linea

#define _WINSOCK_DEPRECATED_NO_WARNINGS 

posto dopo

#include "stdafx.h" 

ma prima che gli altri #include dichiarazioni.

+1

Questo funziona per me. – nomnom

1

Mentre il consiglio precedente funziona, ignora lo scopo di stdafx.h. L'idea è di inserire le istruzioni #include per i file di intestazione che non cambiano frequentemente all'interno distdafx.h per utilizzare intestazioni precompilate. Pertanto si dovrebbe idealmente posizionare

#define _WINSOCK_DEPCRECATED 

all'interno stdafx.h, prima di altri #include dichiarazioni che colpisce, in particolare, prima di includere winsock2.h o altre intestazioni correlati Winsock.