zlib.h --> Mehrdeutigkeit?
-
Hallo, ich bins schon wieder.
da ich mit dem ZipBuilder leider nicht weiterkomme (s. Thread weiter oben) versuche ich es jetzt mit zlib.
habe alles in meinem BCB6 eingerichtet, aber wenn ich die zlib.h include taucht beim kompilieren folgendes Problem auf:
Mehrdeutigkeit zwischen 'Byte' und System::Byte
und zwar in der Zeile "typedef Byte FAR Bytef":
#ifdef SMALL_MEDIUM /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ # define Bytef Byte FAR #else typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC typedef void const *voidpc; typedef void FAR *voidpf; typedef void *voidp; #else typedef Byte const *voidpc; typedef Byte FAR *voidpf; typedef Byte *voidp; #endifHabe leider nirgends etwas über ähnliche Probleme gelesen, und hoffe daher, Ihr könnt mir evtl. weiterhelfen.
Nico

-
Such mal nach namespace...
-
Danke für den Tipp, aber könntest Du etwas konkreter werden?
Was habe ich übersehen?
Nico
-
Nun ja, Dein Compiler findet zwei Definitionen von Byte. Nun möchte er von Dir Wissen, welche er verwenden soll.
Dies erreicht man durch den namespace. Man kann z.B. Unit-weit mit using namespace ... einen bestimmten namespace verwenden, oder den namespace bei jeder Variablendeklaration explicit angeben. Dies erreicht man durch das vorstellen des gewählten namespaces z.B. System::Byte. So weiß der Compiler mit welcher 'Version' er arbeiten soll.
-
Vielen Dank für Deine Hilfe. Ich denke, ich konnte das Problem jetzt lösen...
Aber wie kommt es eigentlich, dass nur ich dieses Problem habe? Ist das bei anderen Compilern anders? In der zconf.h aus der auch der Ausschnitt stammte wird ja ein Typ Byte als unsigned Char definiert. Das muss doch bei der Bennenung zu Mehrdeutigkeiten führen, oder liege ich da jetzt völlig falsch?Vielen Dank, dass Du Deine Zeit geopfert hast. Hat mir echt geholfen!
Nico
-
Nein das Problem hat wohl jeder und es betrifft auf die eine oder andere Art auch alle Compiler.
Beim BCB ist das gängigste Beispiel wohl TBitmap. Auch hier muss man explizit angeben, ob man die VCL- oder die Windows-Version verwenden will.