Omdat vorige topic ten onrechte was gesloten pak ik hier de draad weer op. Ik heb deze keer een heel simpel c++ programma:
Beide includes van winsock hebben direct een foutmelding tot gevolg (compiler: g++ onder cywin/windows XP):
In het vorige topic werd gesuggereerd:
Een andere antwoord was:
C++:
1
2
3
4
5
6
7
8
| #include <string> #include <winsock.h> // #include <winsock2.h> int main() { return 0; } |
Beide includes van winsock hebben direct een foutmelding tot gevolg (compiler: g++ onder cywin/windows XP):
... en met de Visual Studio 6:In file included from ../main.cpp:2:
/usr/include/w32api/winsock.h:81:2: warning: #warning "fd_set and associated macros have been defined in sys/types. This can cause runtime problems with W32 sockets"
In file included from ../main.cpp:2:
/usr/include/w32api/winsock.h:479: error: declaration of C function `int gethostname(char*, int)' conflicts with /usr/include/sys/unistd.h:206: error: previous declaration `int gethostname(char*, unsigned int)' here
Nu ben ik vrij onbekend met programmeren in c/c++ maar dit is toch gewoon raar?main.cpp
c:\program files\microsoft visual studioold\vc98\include\winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
c:\program files\microsoft visual studioold\vc98\include\winsock2.h(134) : warning C4005: 'FD_SET' : macro redefinition
c:\program files\microsoft visual studioold\vc98\include\winsock.h(83) : see previous definition of 'FD_SET'
In het vorige topic werd gesuggereerd:
In dit geval zou <string> dus <winsock.h> includen. Dat zou fout gaan als ik zelf nog eens winsock2 gebruik, maar het gaat dus ook fout als ik zelf winsock.h (1) gebruik. Daarbij, is het zo dat <string> winsock include? Lijkt mij onwaarschijnlijk.Een van je andere includes include al winsock.h (zonder 2 dus), waardoor het fout gaat. Oplossing: laat deze include winsock2 gebruiken (weet niet precies hoe), of makkelijker: gebruik zelf ook winsock 1.
Een andere antwoord was:
Is het dan zo dat ik zodra ik winsock ga gebruiken, ik eerst in alle standaard bestanden die ik include moet gaan zoeken of die bestanden ook winsock gebruiken en dat moet aanpassen? Ik mag toch verwachten dat deze set libraries (van cygwin of van MS) gewoon werken?Gewoon alle winsock.h includes wijzigen in winsock2.h, het is backwards compatible. Je moet ze idd niet door mekaar gaan gebruiken want dan krijg je dubbele definities van Berkeley Sockets functionaliteit (zoals de FD_SET macro's idd).