2009-06-13 9 views
20

Estoy intentando portar el ejemplo de speakhere en otra aplicación y estoy teniendo problemas. Copié todos los archivos y todos los marcos, pero por alguna razón recibí un montón de errores de compilación que nunca había visto antes y, por lo tanto, no sé qué hacer. La única diferencia es que no estoy demandando IB, así que tuve que cambiarlo un poco.error de iphone: esperado '=', ',', ';', 'asm' o '__attribute__' antes '' foo '

¿Qué significa error: expected '=', ',', ';', 'asm' or '__attribute__' before 'foo'? ... Me sale este error varias veces para diferentes archivos

En mi situación, el primer error está apuntando a 'MeterTable' .. una clase que incluye <stdlib.h>, <stdio.h> y <math.h>. Pero esos archivos parecen estar importando bien (si los elimino me dan más errores)

¿Alguna sugerencia sobre cómo depurar esto?

TIA!

EDIT: Todavía no puedo entenderlo. Literalmente solo copio archivos del ejemplo en otro proyecto. ¿Puede alguien echarle un vistazo por favor? SpeakHerePort.zip y el original está aquí SpeakHere.zip

+0

Realmente necesitamos ver el surrou código nding. El error está ocurriendo antes de "MeterTable". Ese es el punto donde el compilador se rindió. – UncleO

+0

Como no sé exactamente qué está causando el error Acabo de publicar el proyecto – dizy

+0

Vea si esta respuesta ayuda: [http://stackoverflow.com/questions/990578/expected-asm-or-attribute-before-crendercontext] (http://stackoverflow.com/questions/990578/expected-asm-or-attribute-before-crendercontext) –

Respuesta

40

Su problema es que está compilando SpeakHerePortAppDelegate.m, que es un archivo Objective C, pero indirectamente incluye MeterTable.h que es un archivo de encabezado C++.

Cambie el nombre a SpeakHerePortAppDelegate.mm (doble m) para que se compile como Objective C++ y se resuelva su problema.

nombre de todos sus archivos .mm y luego todo el código se compilan como Objetivo C++

0

Significa que tiene un error de sintaxis. Si pega el código en cuestión, es más fácil depurarlo.

+0

Bueno, la parte extraña es el hecho de que incluso cuando obtengo un código personalizado, sigo recibiendo errores, y sus errores provienen de archivos que simplemente copié del ejemplo, ni siquiera copié/pegué, sino los archivos completos. Así que es casi como algo que me falta como proyecto de instalación. Pero aparte de importar todos los mismos frameworks, no sé qué más puede ser – dizy

+0

. Si fue un error de algún archivo específico, publicaría el código fuente, pero es el mismo error que abarca varios archivos que funcionan bien en el ejemplo – dizy

1

Parece una declaración sin terminar, probablemente en un archivo de encabezado. Busque "foo" (o lo que sea que el símbolo sea en realidad) en todos los archivos del proyecto, usando ⇧⌘F (Editar ▸ Buscar ▸ Buscar en el proyecto ...) en Xcode, y/o examine los encabezados que está incluyendo donde está MeterTable declarado. A veces, el compilador se confunde con la ubicación real del error, ya que los archivos de cabecera se importan con frecuencia a otros archivos, por lo que el problema puede manifestarse en varias ubicaciones.

1

Esto no podría haber aplicado a esta situación exacta, pero tuve este error exacto también, que fue causado por un mal hacia adelante declaración. En Objective-C, asegúrese de que sus forward-declares comiencen con el signo @, p. Ej.

@class MyClass; 

Aquellos de nosotros todavía en el piloto automático de C++ se olvide de la @, ver que XCode ha puesto de manifiesto la clase como una palabra clave reservada, y pensar que todo está bien con el mundo. No lo es.

0

Tuve una situación similar a algunas de las publicaciones anteriores. Escribí una clase de C++ basada en los ejemplos de la documentación de Audio Queue Services, y tuve este problema de compilación en un proyecto de prueba. Esta publicación ayudó muchísimo.

Hoy, estoy incorporando la clase C++ en mi proyecto, y obtuve el error de compilación de nuevo. En mi caso, también tuve que establecer el tipo (utilizando la ventana "Obtener información") en sourcecode.cpp.objcpp para la clase object-c que llamaba a mi clase C++.

+0

oddmeter's la respuesta funcionó para mí, y creo que es la respuesta más correcta en este caso. Establezca el tipo de archivo en sourcecode.cpp.objcpp. –

2

En mi caso, el .h y.m en cuestión están bien diseñados con objetivos regulares, y la aplicación también puede ejecutarse.

Sin embargo después de que el subconjunto de los archivos se mueven bajo un objetivo biblioteca estática, se obtiene este error de compilación cuando la biblioteca estática se construye.

quedado atrapado por un tiempo & probado las técnicas antes mencionadas, por desgracia no ayudaron en mi caso.

Observó que ocurrió este error sólo para el NSString *, por ejemplo,

  • extern double const kTimeout; // fine
  • extern NSString* const kImageType; // compile error

Después del análisis anterior & pequeño descanso, con el tiempo el problema se resuelve mediante la adición la siguiente importación al .h - "Foundation/Foundation.h"

Cuestiones relacionadas