2010-01-01 6 views
1

Lorsque j'inclue winsock2.h, j'obtiens environ 60 erreurs de redéfinition. J'ai chassé un peu et j'ai trouvé quelques conseils pour inclure winsock2.h b4 y compris windows.h. Je l'ai fait et cela a éclairci les erreurs. Mon problème et ma question concernent exactement comment je devrais y arriver. Je n'ai pas inclus explicitement windows.h, cela a été fait pour moi dans stdafx.h ou stdafx.cpp.Inclut les erreurs de redéfinition de stdafx.h winsock2

J'ai ajouté le include winsock2.h immédiatement b4 l'include Windows.h dans stdafx.h. Est-ce la bonne façon d'y arriver ou existe-t-il un meilleur moyen? Jugement par un commentaire dans nom_programme.rc Je comprends que l'inclusion de windows.h dans stdafx.h a pu être placée à la suite d'une option ou d'un paramètre de configuration, mais je n'ai pas trouvé cette référence. Est-il possible de spécifier quels fichiers sont inclus dans stdafx.h? BTW, WIN32_LEAN_AND_MEAN a été défini b4 en appelant windows.h dans stdafx.h. J'utilise Visual C++ 6.0 et 'Windows Server 2003 PSDK' Le programme est simple C++, pas mfc, pas net, juste plain vanilla.

Répondre

0

Cela devrait fonctionner. Si vous regardez dans winsock2.h, vous pouvez voir qu'il inclut windows.h s'il n'a pas déjà été inclus.

+0

A en juger par les commentaires dans stdafx.h et stdafx.cpp, il est prévu que l'utilisateur ajoute des includes supplémentaires à stdafx.h. Je suis un peu curieux au sujet du commentaire dans stdafx.cpp // stdafx.cpp: fichier source qui comprend juste la norme comprend // \t Solar.pch sera l'en-tête pré-compilé // \t stdafx .obj contiendra les informations de type pré-compilées Qu'entend-on par informations 'type'? Quelqu'un pourrait-il donner un exemple? –

+0

En ajoutant includes à stdafx.h, je * pense * que les en-têtes précompilés sont plus efficaces dans le sens spatial. Mais je sais que les en-têtes précompilés fonctionnent sans stdafx. * Si vous activez l'option dans les paramètres du projet. Au moins, Visual Studio crée toujours un fichier .pch pour tous mes projets, même si je n'ai pas de fichier stdafx. *. Quelqu'un d'autre pourrait avoir plus d'informations sur les informations 'type'. Je pense, cependant, que c'est encore une partie de l'information qu'il utilise en conjonction avec le fichier .pch pour la construction. –

3

Vous pouvez mettre à peu près tout ce que vous voulez dans stdafx.h. Il est certainement bon d'ajouter votre #include pour winsock2.h avant le windows.h. Je déplace l'en-tête WIN32_LEAN_AND_MEAN afin qu'il soit défini avant d'inclure tous les autres en-têtes:

#define WIN32_LEAN_AND_MEAN 
#include <winsock2.h> 
#include <windows.h> 

stdafx.h est un nom horrible pour l'en-tête précompilés. Je n'ai aucune idée pourquoi Visual Studio utilise encore cela pour tous les projets autogénérés. Il donne à l'en-tête précompilé un air de mystère immérité. Dans mes projets, je configure généralement l'en-tête précompilé pour utiliser 'precompiled.h' et 'precompiled.cpp'.

Noel Llopis a un excellent article sur les en-têtes précompilés - 'The Care and Feeding of Precompiled Headers' si vous voulez un peu plus d'informations sur ce qui se passe ici.

+0

+1 pour le lien intéressant – Asaf

0

Vous devez vous assurer que WINSOCK2.H est inclus AVANT windows.h, assurez-vous que chaque fois que vous incluez WINSOCK2.H, il est inclus avant stdafx.h et/ou Windows.h