7
votes

"'Assert' n'a pas été déclaré dans cette lunette" dans MySQL ++

Je compile un projet en Xcode où MySQL ++ est inclus et lié à. Pour une raison quelconque, je continue à obtenir l'erreur de compilateur suivante:

'Assert' n'a pas été déclaré dans cette portée

provenant de CPOOL.H, un fichier d'en-tête faisant 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.


3 commentaires

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


Assert échoue à la ligne 78, virtuelle ~ ConnectionPool () {ASSERT (vide ()); } Et oui, assert.h est inclus.


En outre, MySQL ++ a été installée via MacPorts.


3 Réponses :


7
votes

La réponse la plus évidente serait que "assert.h" n'est pas incluse ou ne se trouve pas dans votre chemin Inclure. Une autre explication est que la macro ASSTER a été indéfinie à un moment donné après l'incluse de l'en-tête.

Edit: Depuis que vous dites que Asser.h est inclus, et nous supposerons pour le moment que cela se trouve car il s'agit d'un en-tête standard, puis cela nous laisse avec la dernière possibilité que j'ai déclaré au-delà, c'est-à-dire que la macro a été non défini.

Etant donné que cpool.h lui-même ne fera pas cela, cela doit être le cas selon lequel l'affirmation est incluse plus tôt par vous-même ou indirectement par un autre en-tête tiers et l'indéfinissement entre cela et votre inclusion de CPOOL.H. Cela peut facilement être testé en déplaçant votre cpool.h include au sommet de votre fichier.


9 commentaires

Le fichier est inclus par proxy via: #include . J'ai déplacé ceci en haut du fichier, mais je reçois toujours ces erreurs.


@Anonymous: est le fichier qui inclut mysql ++. H un en-tête lui-même?


Oui, mais le déplacement du fichier .CPP approprié donne toujours la même erreur.


@Anonymous: Donc, si vous créez un fichier source avec seulement la ligne #include il compile-t-il?


@Anonymous: BTW, lorsque vous dites que vous obtenez la même erreur après avoir déplacé votre en-tête vers le haut de votre fichier source, il s'agit-il d'une autre notamment d'une autre inclusion indirecte de CPOOL.h plus tard?


Comme je l'ai déplacé #include dans le fichier source, l'erreur vient actuellement de là, à nouveau, à partir de ce que # incluent le fichier MySQL ++. H qui comprenait cpool.h par proxy.


@Anonymous: Avez-vous essayé de compiler un fichier source avec seulement la ligne #include dedans? Cela fonctionne pour moi sur Linux.


Compiler un nouveau fichier source avec une seule ligne donne la même erreur.


@Anonymous: OK, j'abandonne :) On dirait que le bogue est véritablement dans la version de MySQL ++, vous avez reçu de Macports.



3
votes

Cela pourrait être qu'une autre bibliothèque de votre chemin Inclure a un fichier "ASSERT.H" différent, et vous êtes inconsciemment, y compris celui-ci au lieu de la norme du système .

J'ai rencontré cette question lors de la rédaction d'une application utilisant gstreamer sur Mac OSX. Il s'avère que Inclure le répertoire de Gstreamer (/Library/frameworks/gstreamer.framework/headers) comprend un fichier "assert.h", qui est non standard et un remplacement inapproprié pour le réel Assert.h. Quand j'ai ajouté -i / bibliothèque / frameworks / gstreamer.frameworks / en-têtes sur ma commande compilation, soudainement mes sources, qui viennent de dire "#include " où y compris la version Gstreamer. Cela a entraîné l'échec de ma compilation avec la même erreur que vous obtenez.


0 commentaires

7
votes

en C ++ Ajout d'en-tête Cassert doit résoudre votre problème.

#include <cassert>


0 commentaires