[SFML] Neudefinitions Fehler



  • Hey,
    das hier ist mehr eine Frage aus Neugierde, da ich den eigentlichen Fehler schon gefunden habe, aber nun gut. Ich benutzte zur Zeit ein wenig die Multimedia-Library SFML und mir ist da was komisches aufgefallen:

    // produziert eine Reihe von Neudefintions Fehlern zum Beispiel:
    // 
    // 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1818):
    //             error C2375: 'recv': Neudefinition; unterschiedliche Bindung
    // 1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(790): Siehe Deklaration von 'recv'
    #include <windows.h>
    #include <SFML/System.hpp>
    #include <SFML/Network.hpp>
    
    // funktioniert einwandfrei
    #include <SFML/System.hpp>
    #include <SFML/Network.hpp>
    #include <windows.h>
    

    Bei den Headern der STL ist dem nicht so, außerdem gibts ja auch Sachen wie Include-Guards und so. Wieso funktioniert das eine, aber das andere nicht?

    Edit: Jetzt hab ichs irgendwie wieder ganz zerschossen und die Fehler tauchen bei beiden Varianten auf 😃


  • Administrator

    Das ist ein Windows Headerfile Problem. Geschichtlich bedingt inkludiert <windows.h> die <winsock.h> . Dies ist allerdings die alte Version der Windowssockets. Die neue Version hat ja das Headerfile <windsock2.h> . Die beiden habe natürlich unterschiedliche Header Guards, aber deklarieren gleiche Funktionsnamen.

    Weitere Informationen findest du hier (unten bei note):
    http://msdn.microsoft.com/en-us/library/ms737629.aspx

    Und hier (auch ganz unten):
    http://msdn.microsoft.com/en-us/library/aa383745.aspx

    Also ist die Lösung das Makro WIN32_LEAN_AND_MEAN .

    Grüssli



  • Aha, das Makro hatte ich schon öfter gesehen, aber da es bei mir nie (zumindest keinen offensichtlichen) Effekt erzielte, ignorierte ich es. Vielen Dank! Gut zu wissen 🙂


Anmelden zum Antworten