J'ai créé une classe de wrapper de socket, mais j'ai trop d'erreurs que je ne sais pas comment résoudre. J'ai essayé Erreur du didacticiel Winsock et Impossible d'inclure Winsock2.h dans MSVC 2010 , mais aucune utilisation
Voici le code:
//#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <string>
#include <Windows.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib,"ws2_32_lib")
using namespace std;
#define WM_SOCKET 0x10000
class Socket
{
};
Voici les erreurs:
Error 107 error C3861: 'WSAStartup': identifier not found \85 1 Project2_SocketLib
Error 89 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 696 1 Project2_SocketLib
Error 90 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 703 1 Project2_SocketLib
Error 91 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 742 1 Project2_SocketLib
Error 92 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 749 1 Project2_SocketLib
Error 93 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 793 1 Project2_SocketLib
Error 94 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 800 1 Project2_SocketLib
Error 95 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 841 1 Project2_SocketLib
Error 96 error C3861: 'WSASetLastError': identifier not found C:\Program Files (x86)\Windows Kits\8.0\Include\um\WS2tcpip.h 848 1 Project2_SocketLib
Error 109 error C3861: 'WSAGetLastError': identifier not found \87 1 Project2_SocketLib
Error 112 error C3861: 'WSAGetLastError': identifier not found \93 1 Project2_SocketLib
Error 105 error C3861: 'WSACleanup': identifier not found \63 1 Project2_SocketLib
Error 103 error C3861: 'shutdown': identifier not found \57 1 Project2_SocketLib
Error 100 error C3861: 'send': identifier not found \37 1 Project2_SocketLib
Error 101 error C3861: 'send': identifier not found \43 1 Project2_SocketLib
Error 98 error C3861: 'recv': identifier not found \31 1 Project2_SocketLib
Error 99 error C3861: 'recv': identifier not found \34 1 Project2_SocketLib
Error 116 error C3861: 'inet_ntoa': identifier not found \115 1 Project2_SocketLib
Error 119 error C3861: 'htons': identifier not found \137 1 Project2_SocketLib
Error 126 error C3861: 'htonl': identifier not found \139 1 Project2_SocketLib
Error 104 error C3861: 'closesocket': identifier not found \58 1 Project2_SocketLib
Error 102 error C3861: 'accept': identifier not found \50 1 Project2_SocketLib
Error 6 error C3805: 'constant': unexpected token, expected either '}' or a ',' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 414 1 Project2_SocketLib
Error 108 error C2568: '+' : unable to resolve function overload \87 1 Project2_SocketLib
Error 111 error C2568: '+' : unable to resolve function overload \93 1 Project2_SocketLib
Error 124 error C2568: ':' : unable to resolve function overload \139 1 Project2_SocketLib
Error 125 error C2446: ':' : no conversion from 'unsigned long (__stdcall *)(const char *)' to 'u_long (__stdcall *)(u_long)' \139 1 Project2_SocketLib
Error 106 error C2440: '=' : cannot convert from 'WSADATA' to 'int' \75 1 Project2_SocketLib
Error 110 error C2440: '=' : cannot convert from 'SOCKET (__stdcall *)(int,int,int)' to 'SOCKET' \90 1 Project2_SocketLib
Error 115 error C2440: '=' : cannot convert from 'char *(__stdcall *)(in_addr)' to 'std::string' \115 1 Project2_SocketLib
Error 66 error C2375: 'WSAUnhookBlockingHook' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2383 1 Project2_SocketLib
Error 61 error C2375: 'WSAStartup' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2296 1 Project2_SocketLib
Error 63 error C2375: 'WSASetLastError' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2332 1 Project2_SocketLib
Error 67 error C2375: 'WSASetBlockingHook' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2400 1 Project2_SocketLib
Error 65 error C2375: 'WSAIsBlocking' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2366 1 Project2_SocketLib
Error 64 error C2375: 'WSAGetLastError' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2349 1 Project2_SocketLib
Error 62 error C2375: 'WSACleanup' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2315 1 Project2_SocketLib
Error 68 error C2375: 'WSACancelBlockingCall' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2417 1 Project2_SocketLib
Error 75 error C2375: 'WSACancelAsyncRequest' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2592 1 Project2_SocketLib
Error 76 error C2375: 'WSAAsyncSelect' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2612 1 Project2_SocketLib
Error 70 error C2375: 'WSAAsyncGetServByPort' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2466 1 Project2_SocketLib
Error 69 error C2375: 'WSAAsyncGetServByName' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2439 1 Project2_SocketLib
Error 72 error C2375: 'WSAAsyncGetProtoByNumber' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2517 1 Project2_SocketLib
Error 71 error C2375: 'WSAAsyncGetProtoByName' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2492 1 Project2_SocketLib
Error 73 error C2375: 'WSAAsyncGetHostByName' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2542 1 Project2_SocketLib
Error 74 error C2375: 'WSAAsyncGetHostByAddr' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2569 1 Project2_SocketLib
Error 53 error C2375: 'socket' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2120 1 Project2_SocketLib
Error 52 error C2375: 'shutdown' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2099 1 Project2_SocketLib
Error 51 error C2375: 'setsockopt' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2077 1 Project2_SocketLib
Error 50 error C2375: 'sendto' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2051 1 Project2_SocketLib
Error 49 error C2375: 'send' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2026 1 Project2_SocketLib
Error 48 error C2375: 'select' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2002 1 Project2_SocketLib
Error 47 error C2375: 'recvfrom' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1976 1 Project2_SocketLib
Error 46 error C2375: 'recv' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1951 1 Project2_SocketLib
Error 45 error C2375: 'ntohs' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1931 1 Project2_SocketLib
Error 44 error C2375: 'ntohl' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1914 1 Project2_SocketLib
Error 43 error C2375: 'listen' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1896 1 Project2_SocketLib
Error 35 error C2375: 'ioctlsocket' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1658 1 Project2_SocketLib
Error 42 error C2375: 'inet_ntoa' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1795 1 Project2_SocketLib
Error 41 error C2375: 'inet_addr' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1778 1 Project2_SocketLib
Error 40 error C2375: 'htons' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1761 1 Project2_SocketLib
Error 39 error C2375: 'htonl' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1744 1 Project2_SocketLib
Error 38 error C2375: 'getsockopt' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1723 1 Project2_SocketLib
Error 37 error C2375: 'getsockname' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1700 1 Project2_SocketLib
Error 57 error C2375: 'getservbyport' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2221 1 Project2_SocketLib
Error 58 error C2375: 'getservbyname' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2240 1 Project2_SocketLib
Error 59 error C2375: 'getprotobynumber' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2258 1 Project2_SocketLib
Error 60 error C2375: 'getprotobyname' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2275 1 Project2_SocketLib
Error 36 error C2375: 'getpeername' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1679 1 Project2_SocketLib
Error 56 error C2375: 'gethostname' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2181 1 Project2_SocketLib
Error 55 error C2375: 'gethostbyname' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2163 1 Project2_SocketLib
Error 54 error C2375: 'gethostbyaddr' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 2144 1 Project2_SocketLib
Error 34 error C2375: 'connect' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1637 1 Project2_SocketLib
Error 33 error C2375: 'closesocket' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1618 1 Project2_SocketLib
Error 32 error C2375: 'bind' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1599 1 Project2_SocketLib
Error 31 error C2375: 'accept' : redefinition; different linkage C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 1577 1 Project2_SocketLib
Error 118 error C2228: left of '.sin_port' must have class/struct/union \137 1 Project2_SocketLib
Error 120 error C2228: left of '.sin_family' must have class/struct/union \138 1 Project2_SocketLib
Error 121 error C2228: left of '.sin_addr' must have class/struct/union \139 1 Project2_SocketLib
Error 122 error C2228: left of '.S_un' must have class/struct/union \139 1 Project2_SocketLib
Error 123 error C2228: left of '.S_addr' must have class/struct/union \139 1 Project2_SocketLib
Error 114 error C2227: left of '->sin_addr' must point to class/struct/union/generic type \115 1 Project2_SocketLib
Error 97 error C2079: 'Socket::wsaData' uses undefined struct 'WSAData' \18 1 Project2_SocketLib
Error 117 error C2079: 'sockAddrIn' uses undefined struct 'sockaddr_in' \135 1 Project2_SocketLib
Error 78 error C2079: 'sockaddr_gen::AddressIn' uses undefined struct 'sockaddr_in' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h 81 1 Project2_SocketLib
Error 77 error C2079: 'sockaddr_gen::Address' uses undefined struct 'sockaddr' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h 80 1 Project2_SocketLib
Error 87 error C2079: '_SOCKADDR_INET::Ipv4' uses undefined struct 'sockaddr_in' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h 202 1 Project2_SocketLib
Error 5 error C2059: syntax error : 'constant' C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 414 1 Project2_SocketLib
Error 113 error C2027: use of undefined type 'sockaddr_in' \115 1 Project2_SocketLib
Error 21 error C2011: 'WSAData' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 353 1 Project2_SocketLib
Error 16 error C2011: 'timeval' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 169 1 Project2_SocketLib
Error 22 error C2011: 'sockproto' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 451 1 Project2_SocketLib
Error 12 error C2011: 'sockaddr_in' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 608 1 Project2_SocketLib
Error 4 error C2011: 'sockaddr' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2def.h 217 1 Project2_SocketLib
Error 19 error C2011: 'servent' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 245 1 Project2_SocketLib
Error 20 error C2011: 'protoent' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 257 1 Project2_SocketLib
Error 18 error C2011: 'netent' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 238 1 Project2_SocketLib
Error 23 error C2011: 'linger' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 493 1 Project2_SocketLib
Error 88 error C2011: 'ip_mreq' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\shared\ws2ipdef.h 715 1 Project2_SocketLib
Error 17 error C2011: 'hostent' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 225 1 Project2_SocketLib
Error 13 error C2011: 'fd_set' : 'struct' type redefinition C:\Program Files (x86)\Windows Kits\8.0\Include\um\WinSock2.h 125 1 Project2_SocketLib
Error 127 error C1003: error count exceeds 100; stopping compilation \139 1 Project2_SocketLib
Vous devez ré-ordonner les includes des en-têtes Windows comme ceci:
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <Windows.h>
En d'autres termes, les en-têtes WinSock doivent être inclus avant Windows.h
.
Ou définissez WIN32_LEAN_AND_MEAN
que vous avez commenté pour une raison quelconque.
Je pense que vous devrez également changer la méthode Accept
pour renvoyer SOCKET
au lieu de Socket
.
Et le #pragma
devrait être:
#pragma comment(lib,"ws2_32")
Je me suis assuré que #include "Winsock2.h" était avant tout #include "windows.h" et "#include" Winsock.h "et que l'affaire était résolue.
Juste une question de patience, regardez un par un et établissez cet ordre, d'abord #include "Winsock2.h" puis #include "windows.h"
J'ai vérifié les inclusions récursives, j'ai repéré les fichiers d'en-tête qui incluent (récursivement) des #include "windows.h" et "#include" Winsock.h et écris un # include "Winsock2.h". J'ai ajouté dans ce fichier #include "Winsock2.h" `en tant que première inclusion.
Vous ne pouvez pas inclure Windows.h avant d'inclure WinSock2, car cela entraînerait l'en-tête de Windows pour inclure une version plus ancienne de winsock. Supprimez le Windows.h inclure tout à fait.
Voir, par exemple, ce lien MSDN: http://msdn.Microsoft.com/en-us/library/windows/desktop/ms737629(v=vs.85).aspx La note la partie sous le premier bloc de code explique cela.