2010-05-25 22 views
5

Ich kompiliere ein Projekt in XCode, wo MySQL ++ enthalten und verknüpft ist. Aus irgendeinem Grund Ich erhalte den folgenden Compiler-Fehler:"'assert' wurde in diesem Bereich nicht deklariert" in MySQL ++

‚assert‘ wurde in diesem Rahmen

Ursprung von cpool.h, eine Header-Datei, die Teil von MySQL ist ++ nicht deklariert. Weiß jemand, warum das ausgelöst wird?

EDIT: Als Referenz wurde MySQL ++ über Macports installiert.

+0

Bitte die vollständige Fehlermeldung posten, da sie oft Zeilennummern enthält. Wo in "cpool.h" ist die ASSERT, die fehlschlägt? –

+0

Assert schlägt in Zeile 78 fehl, virtual ~ ConnectionPool() {assert (leer()); } Und ja, assert.h wird aufgenommen. – Anonymous

+0

Außerdem wurde MySQL ++ über Macports installiert. – Anonymous

Antwort

6

Die naheliegendste Antwort wäre, dass "assert.h" nicht enthalten ist oder nicht in Ihrem Include-Pfad gefunden wird. Eine andere Erklärung ist, dass das Assert-Makro zu irgendeinem Zeitpunkt nach dem Einfügen des Headers undefiniert war.

Edit: Da Sie sagen, dass assert.h enthalten ist, und wir annehmen für den Moment, dass es gefunden wird, da es eine Standard-Header ist, dann bleibt uns die letzte Möglichkeit, die ich oben gesagt habe, dh das Makro hat war undefiniert.

Da cpool.h selbst dies nicht tun wird, muss es der Fall sein, dass assert.h früher entweder von Ihnen selbst oder indirekt von einem anderen 3rd-Party-Header und die Undefiniert geschieht zwischen diesem und Ihre Einbeziehung von cpool.h enthalten. Dies kann einfach getestet werden, indem Sie Ihr cpool.h-Include an den Anfang Ihrer Datei verschieben.

+0

Die Datei wird per Proxy eingefügt: #include . Ich habe dies an den Anfang der Datei verschoben, aber ich bekomme immer noch diese Fehler. – Anonymous

+0

@Anonymous: Ist die Datei, die mysql ++ enthält. H eine Kopfzeile selbst? – Troubadour

+0

Ja, aber das Verschieben der richtigen CPP-Datei führt immer noch zum selben Fehler. – Anonymous

2

Es könnte sein, dass eine andere Bibliothek in Ihrem Include-Pfad eine andere "assert.h" -Datei hat und Sie diese unwissentlich anstelle des Systemstandards <assert.h> einschließen.

Ich stieß auf dieses Problem beim Schreiben einer Anwendung, die Gstreamer auf Mac OSX verwendet. Es stellt sich heraus, dass das Include-Verzeichnis von gstreamer (/Library/Frameworks/GStreamer.framework/Headers) eine Datei "assert.h" enthält, die nicht standardisiert ist und ein unpassender Ersatz für das reale assert.h ist. Als ich -I/Library/Frameworks/GStreamer.frameworks/Headers zu meinem Kompilierbefehl hinzufügte, wurden plötzlich meine Quellen, die gerade "#include <assert.h>" enthielten, einschließlich der gstreamer-Version. Dies führte dazu, dass meine Kompilierung mit demselben Fehler fehlschlug, den Sie erhalten hatten.

2

In C++ sollte das Hinzufügen von Cassert-Header Ihr Problem beheben.

#include <cassert> 
Verwandte Themen