59 خطأ في Winsock2.h


أهلاً بكم،
أنا أستخدم VC++ 6.0 (ولا أريد تغييره لأسباب خاصة بي) وأقوم ببرمجة خادم عميل بسيط باستخدام Winsock2.h.

المشكلة هي عندما أقوم بتضمين Winsock2.h وتجميعه، فإن VC++ يحتوي على 59 خطأ.
مثل هذه الأخطاء:
c:\program files\microsoft visual studio\vc98\include\winsock2.h(99): خطأ C2011: ‘fd_set’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(134): تحذير C4005: ‘FD_SET’: إعادة تعريف الماكرو
c:\program files\microsoft visual studio\vc98\include\winsock.h(83): راجع التعريف السابق لـ “FD_SET”
c:\program files\microsoft visual studio\vc98\include\winsock2.h(143): خطأ C2011: ‘timeval’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(199): خطأ C2011: ‘المضيف’: إعادة تعريف النوع ‘الهيكل’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(212): خطأ C2011: ‘netent’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(219): خطأ C2011: “servent”: إعادة تعريف النوع “struct”
c:\program files\microsoft visual studio\vc98\include\winsock2.h(226): خطأ C2011: ‘protoent’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(310): خطأ C2011: ‘in_addr’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(368): خطأ C2011: ‘sockaddr_in’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(378): خطأ C2011: ‘WSAData’: إعادة تعريف النوع ‘struct’
c:\program files\microsoft visual studio\vc98\include\winsock2.h(430): تحذير C4005: ‘SO_DONTLINGER’: إعادة تعريف الماكرو
c:\program files\microsoft visual studio\vc98\include\winsock.h(391): راجع التعريف السابق لـ “SO_DONTLINGER”
c:\program files\microsoft visual studio\vc98\include\winsock2.h(483): تحذير C4005: ‘AF_IPX’: إعادة تعريف الماكرو
c:\program files\microsoft visual studio\vc98\include\winsock.h(449): راجع التعريف السابق لـ “AF_IPX”
c:\program files\microsoft visual studio\vc98\include\winsock2.h(506): تحذير C4005: ‘AF_MAX’: إعادة تعريف الماكرو

لماذا يحدث هذا؟؟ ما حل مشكلتي؟؟

الحل 1

إذا نظرت عن كثب، ستلاحظ أن المترجم يطلب منك ذلك “راجع التعريف السابق لـ xxxx”، والذي تم العثور عليه في Winsock.h. وبعبارة أخرى، في مكان ما تقوم بما في ذلك Winsock.h. تخلص من هذا التضمين والذي يجب أن يصلح هذه الأخطاء.

نأمل أن لا يقدم ذلك مجموعة من الأخطاء الجديدة :). إذا كان لديك مشاكل بعد الحذف include <winsock.h>، طريقة إصلاحها هي أن يكون لديك ما يلي في ملف stdafx.h:

سي ++
#define WIN32_LEAN_AND_MEAN

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

تشير إلى هذا[^] مقالة MSDN.

ملاحظة من مقالة MSDN:

يتضمن ملف الرأس Winsock2.h داخليًا عناصر أساسية من ملف الرأس Windows.h، لذلك لا يوجد عادةً سطر #include لملف الرأس Windows.h في تطبيقات Winsock. إذا كانت هناك حاجة إلى سطر #include لملف رأس Windows.h، فيجب أن يسبقه الماكرو #define WIN32_LEAN_AND_MEAN. لأسباب تاريخية، يتم تعيين رأس Windows.h بشكل افتراضي على تضمين ملف الرأس Winsock.h لـ Windows Switchs 1.1. سوف تتعارض التعريفات الموجودة في ملف الرأس Winsock.h مع التعريفات الموجودة في ملف الرأس Winsock2.h المطلوب بواسطة Windows مقبس 2.0. يمنع الماكرو WIN32_LEAN_AND_MEAN تضمين Winsock.h بواسطة رأس Windows.h.

سورين مادسن

コメント

タイトルとURLをコピーしました