2009-06-13 10 views
20

Sto provando a portare l'esempio speakhere in un'altra app e sto avendo problemi. Ho copiato tutti i file e tutti i framework, ma per qualche ragione ho un sacco di errori di compilazione che non ho mai visto prima e quindi non so cosa fare. L'unica differenza è che non sto citando in giudizio IB e quindi ho dovuto cambiarlo leggermente.iphone error: previsto '=', ',', ';', 'asm' o '__attribute__' prima di '' foo '

Cosa error: expected '=', ',', ';', 'asm' or '__attribute__' before 'foo' dire? ... ottengo questo errore più volte per diversi file

Nella mia situazione il primo errore sta puntando 'MeterTable' .. una classe che comprende <stdlib.h>, <stdio.h> e <math.h>. Ma questi file sembrano importare bene (se li rimuovo ho più errori)

Qualche suggerimento su come eseguire il debug di questo?

TIA!

MODIFICA: Ancora non riesco a capirlo. Sto letteralmente copiando solo i file dell'esempio in un altro progetto. Qualcuno può controllarlo per favore? SpeakHerePort.zip e l'originale è qui SpeakHere.zip

+0

Abbiamo davvero bisogno di vedere il surrou codice L'errore si verifica prima di "MeterTable". Questo è solo il punto in cui il compilatore ha rinunciato. – UncleO

+0

Poiché non so esattamente quale sia la causa dell'errore, ho appena pubblicato il progetto – dizy

+0

Controlla se questa risposta è utile: [http://stackoverflow.com/questions/990578/expected-asm-or-attribute-before-crendercontext] (http://stackoverflow.com/questions/990578/expected-asm-or-attribute-before-crendercontext) –

risposta

40

Il tuo problema è che stai compilando SpeakHerePortAppDelegate.m, che è un file Objective C, ma che include indirettamente MeterTable.h che è un file di intestazione C++.

Rinominarlo in SpeakHerePortAppDelegate.mm (doppia m) in modo che sia compilato come Objective C++ e il problema sia stato risolto.

Nome tutti i file .MM e poi tutto il vostro codice saranno compilati come Objective C++

0

Significa che si è verificato un errore di sintassi. Se si incolla il codice in questione, è più facile eseguire il debug.

+0

Beh, la parte strana è il fatto che anche quando prendo un qualsiasi codice personalizzato, ottengo ancora errori e i suoi errori da file che ho semplicemente copiato dall'esempio, nemmeno da copoy/paste ma dall'intero file. Quindi è quasi come se mi mancasse qualcosa come un progetto. Ma altri poi importando tutti gli stessi framework non so cos'altro può essere – dizy

+0

Se si trattava di un errore da un file specifico avrei postato il sorgente, ma è lo stesso errore che copre più file che funzionano tutti bene nell'esempio – dizy

1

Sembra una dichiarazione incompleta, probabilmente in un file di intestazione. Cerca 'foo' (o qualunque sia effettivamente il simbolo) su tutti i file di progetto, usando ⇧⌘F (Modifica ▸ Trova ▸ Trova nel progetto ...) in Xcode, e/o esamina le intestazioni che stai includendo dove MeterTable è dichiarato. A volte il compilatore si confonde sulla posizione effettiva dell'errore, poiché i file di intestazione sono spesso importati in altri file, quindi il problema può manifestarsi in più posizioni.

1

Questo non sarebbe applicato a questa situazione esatta, ma ho avuto questo errore esatto troppo, che è stato causato da un cattivo in avanti dichiarazione. In Objective-C, assicurati che i tuoi forward-dichiari inizino con il segno @ - ad es.

@class MyClass; 

Quelli di noi ancora con il pilota automatico da C++ si dimentica la @, vedere che XCode ha evidenziato classe come una parola chiave riservata, e pensare tutto va bene con il mondo. Non è.

0

Ho avuto uno scenario simile ad alcuni dei post sopra. Avevo scritto una classe C++ basata sugli esempi nella documentazione dei servizi di coda audio e avevo questo problema di compilazione in un progetto di test. Questo post ha aiutato una quantità enorme.

Oggi, sto incorporando la classe C++ nel mio progetto e ho ricevuto di nuovo l'errore di compilazione. Nel mio scenario, ho dovuto anche impostare il tipo (usando la finestra "Ottieni informazioni") su sourcecode.cpp.objcpp per la classe obiettivo-obiettivo che stava chiamando la mia classe C++.

+0

oddmeter's risposta ha funzionato per me, e penso che sia la risposta più corretta in questo caso. Impostare il tipo di file su sourcecode.cpp.objcpp. –

2

Nel mio caso, il .h e.m in questione sono costruiti bene con target regolari, e l'App può funzionare pure.

Tuttavia, dopo che il sottoinsieme dei file viene spostato sotto una destinazione di libreria statica, viene visualizzato questo errore di compilazione quando viene creata la libreria statica.

È stato bloccato per un po '& provato le tecniche di cui sopra, purtroppo non hanno aiutato nel mio caso.

notato che questo errore è accaduto solo per la NSString *, per esempio,

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

Dopo l'analisi di cui sopra & piccola pausa, alla fine il problema è stato risolto con l'aggiunta di la seguente importazione per il .h - "Foundation/Foundation.h"