2010-05-25 6 views
5

Je compile un projet en XCode où MySQL ++ est inclus et lié. Pour une raison quelconque, je continue à obtenir l'erreur de compilation suivante:"'assert' n'a pas été déclaré dans cette portée" dans MySQL ++

« assert » n'a pas été déclaré dans ce cadre

provenant de cpool.h, un fichier d'en-tête qui fait partie de MySQL ++. Est-ce que quelqu'un sait pourquoi cela est déclenché?

EDIT: Pour référence, MySQL ++ a été installé via Macports.

+0

Veuillez envoyer le message d'erreur complet, car il comporte souvent des numéros de ligne. Où dans 'cpool.h' est l'ASSERT qui échoue? –

+0

L'assertion échoue à la ligne 78, virtual ~ ConnectionPool() {assert (vide()); } Et oui, assert.h est inclus. – Anonymous

+0

De plus, MySQL ++ a été installé via Macports. – Anonymous

Répondre

6

La réponse la plus évidente serait que "assert.h" n'est pas inclus ou n'est pas trouvé dans votre chemin d'inclusion. Une autre explication est que la macro assert a été indéfinie après l'inclusion de l'en-tête. Edit: Puisque vous dites que assert.h est inclus, et nous supposerons pour le moment qu'il est trouvé puisqu'il s'agit d'un en-tête standard, alors cela nous laisse la dernière possibilité que j'ai indiquée ci-dessus, c'est-à-dire que la macro a été indéfini. Puisque cpool.h lui-même ne le fera pas, il faut que assert.h soit inclus plus tôt par vous-même ou indirectement par un autre en-tête de tierce partie et l'indéfini se produisant entre ceci et votre inclusion de cpool.h. Cela peut facilement être testé en déplaçant votre cpool.h include au début de votre fichier.

+0

Le fichier est inclus par proxy via: #include . J'ai déplacé ceci au tout début du fichier mais je reçois toujours ces erreurs. – Anonymous

+0

@Anonymous: Le fichier contenant mysql ++. H est-il lui-même un en-tête? – Troubadour

+0

Oui, mais le déplacer le bon fichier .cpp donne toujours la même erreur. – Anonymous

2

Il se peut qu'une autre bibliothèque de votre chemin d'inclusion contienne un fichier "assert.h" différent et que vous l'incluiez sans le savoir, à la place du standard < du système assert.h >.

J'ai rencontré ce problème lors de l'écriture d'une application qui utilise gstreamer sous Mac OSX. Il s'avère que le répertoire include de gstreamer (/Library/Frameworks/GStreamer.framework/Headers) inclut un fichier "assert.h", qui est non-standard et un remplaçant inadapté au vrai assert.h. Quand j'ai ajouté -I/Library/Frameworks/GStreamer.frameworks/Headers à ma commande de compilation, tout d'un coup mes sources, qui ont juste dit "#include <assert.h>" où l'on inclut la version de gstreamer. Cela a provoqué l'échec de ma compilation avec la même erreur que vous receviez.

2

En C++, l'ajout d'un en-tête cassert devrait résoudre votre problème.

#include <cassert> 
Questions connexes