Ne peut pas inclure les deux fichiers (WinSock2, Windows.h)

Je vais avoir un problème, y compris les deux fichiers.
Maintenant, je sais que je dois inclure Winsock2 d'abord, puis de windows.h, ou plus simplement:

#define WIN32_LEAN_AND_MEAN

mais, je suis toujours avoir des problèmes de

J'ai un fichier d'en-tête qui est appelé XS.h qui ressemble à ceci

#ifndef XS_H
#define XS_H

#include <winsock2.h>
#include <ws2tcpip.h>
#include <Windows.h>

#endif

et je suis y compris XS.h dans l'en-tête Client.h.
Client.h inclure ressemble à ceci :

#ifndef CLIENT_H
#define CLIENT_H

#include "XS.h"

XS.h est mon seul inclure dans Client.h, et pourtant j'ai encore des messages d'erreurs (et comme vous pouvez le voir, Winsockest inclus avant windows.h

Je reçois environ 78 erreurs, en voici quelques uns :

Error   90  error C3861: 'WSASetLastError': identifier not found    c:\program files (x86)\windows kits.0\include\um\ws2tcpip.h   703
Error   61  error C2375: 'WSAStartup' : redefinition; different linkage c:\program files (x86)\windows kits.0\include\um\winsock2.h   2296
Error   49  error C2375: 'send' : redefinition; different linkage   c:\program files (x86)\windows kits.0\include\um\winsock2.h   2026

Comment puis-je résoudre ce problème?

Merci!

Edit: j'ai essayé d'utiliser #define _WINSOCKAPI_, bien qu'il n'a pas résolu mon problème...
J'ai winsock.h d'abord, puis windows.h, si cela ne fonctionne toujours l'erreur pour moi.

  • utilisation #pragma once dans le fichier d'en-tête
  • Je suggère de toujours inclure windows.h et windowsx.h tout d'abord, dans chaque fichier source (de préférence à l'aide de la stdafx.h de fichier). Je ne suis pas sûr qu'il permet de résoudre ce problème particulier, mais il réduit la confusion beaucoup.
  • J'ai changé Client.h comprend à présent : #pragma once #include <winsock2.h> #include <ws2tcpip.h> #include "Chat.h" si elle ne marche pas encore, même des erreurs....
  • essayez également dans Chat.h
  • Encore, même erreur.
  • Ce pourrait être liée: stackoverflow.com/questions/1372480/c-redefinition-header-files
  • MIcrosoft "Intellisense" ne pas utiliser le même moteur d'analyse que le compilateur proprement dite, et de sorte qu'il peut et ne crache "messages d'erreur" pour parfaitement valable code. Cela dit, cela sonne comme un véritable problème, et pas seulement un Intellisense apparente-problème. Vous devez toujours inclure windows.h avant d'inclure tout autre API de Windows en-tête. C'est parce que Microsoft les en-têtes en général ne comprennent pas tout ce que dont ils ont besoin, c'est à dire ne pas suivre bien pratique. Il est possible de faire juste <windows.> forcé inclure, mais qui se répète de la faute qui a causé le problème: mieux corriger la source.
  • J'ai modifier mon post pour une compréhension plus facile.

InformationsquelleAutor Amit | 2014-01-28