2010-05-25 27 views
5

Estoy compilando un proyecto en XCode donde MySQL ++ está incluido y vinculado. Por alguna razón, me siguen dando el siguiente error de compilación:"'assert' no fue declarado en este ámbito" en MySQL ++

'afirmar’no estaba declarado en este ámbito

procedentes de cpool.h, un archivo de cabecera que es parte de MySQL ++. ¿Alguien sabe por qué esto se está disparando?

EDITAR: como referencia, MySQL ++ se instaló a través de Macports.

+0

fija por favor el mensaje de error completo, ya que a menudo incluye los números de línea. Donde en 'cpool.h' está el ASSERT que está fallando? –

+0

Assert está fallando en la línea 78, virtual ~ ConnectionPool() {assert (empty()); } Y sí, assert.h está siendo incluido. – Anonymous

+0

Además, MySQL ++ se instaló a través de Macports. – Anonymous

Respuesta

6

La respuesta más obvia sería que "assert.h" no se está incluyendo o no se encuentra en su ruta de inclusión. Otra explicación es que la macro assert no se ha definido en algún momento después de que se incluyó el encabezado.

Editar: Como dices que assert.h está incluido, y asumiremos por el momento que se está encontrando ya que es un encabezado estándar, entonces eso nos deja con la última posibilidad que indiqué anteriormente, es decir, que la macro tiene sido indefinido

Desde cpool.h mismo no será haciendo esto tiene que ser el caso en el que se incluye assert.h anterior, ya sea por sí mismo o indirectamente por otra cabecera del partido y el tercero undefining pasando entre esto y su inclusión de cpool.h. Esto puede probarse fácilmente moviendo su cpool.h include a la parte superior de su archivo.

+0

El archivo se está incluyendo por proxy a través de: #include . He movido esto a la parte superior del archivo, pero sigo recibiendo estos errores. – Anonymous

+0

@Anonymous: ¿Es el archivo que incluye mysql ++. H un encabezado en sí? – Troubadour

+0

Sí, pero al moverlo el archivo .cpp correcto todavía produce el mismo error. – Anonymous

2

Podría ser que otra biblioteca en su ruta include tenga un archivo "assert.h" diferente, y usted sin saberlo lo incluye en lugar del estándar <assert.h> del sistema.

Me encontré con este problema al escribir una aplicación que usa gstreamer en Mac OSX. Resulta que el directorio de inclusión de gstreamer (/Library/Frameworks/GStreamer.framework/Headers) incluye un archivo "assert.h", que no es estándar y es un reemplazo inadecuado para la assert.h real. Cuando agregué -I/Library/Frameworks/GStreamer.frameworks/Headers a mi comando de compilación, de repente mis fuentes, que acababan de decir "#include <assert.h>" donde incluía la versión de gstreamer. Esto causó que mi compilación fallara con el mismo error que estaba recibiendo.

2

En C++ agregar el encabezado cassert debería solucionar su problema.

#include <cassert> 
Cuestiones relacionadas