2009-05-13 12 views
0

Ich versuche, Apples Speak Here sample code in meiner eigenen iPhone App wieder zu verwenden. Ich habe das Projekt ohne Probleme heruntergeladen und kompiliert, also habe ich einige Dateien zu meiner eigenen Anwendung hinzugefügt. Wenn ich versuche, meine eigene Anwendung zu kompilieren, gibt der Compiler michxcode gibt Syntaxfehler auf cpp code

MeterTable.h: 54: Fehler: Syntaxfehler vor

Der entsprechende Code 'MeterTable' ist:

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 

class MeterTable // line 54 
{ 
public: 

Es sieht Art von wie xcode erkennt MeterTable.h und MeterTable.mm nicht als C++ - Dateien. Ich habe jedoch Datei >> GetInfo für MeterTable.mm überprüft und Dateityp als sourcecode.cpp.cpp aufgelistet.

Warum wird das nicht kompilieren?

+0

Ich legte die Quelle, die Sie in die Datei MeterTable.h geschrieben haben, eine Datei MeterTable.mm hinzugefügt, die nur main() drin und kompiliert es. Keine Fehler. Wir brauchen ein Sample, das den Fehler reproduziert, ansonsten hilft es nicht. –

Antwort

1
  1. Sie darunter "MeterTable.h" in einer nicht C++ andere Datei als MasterTable.mm einzuschließen.
  2. Der Fehler ist nicht in 'MeterTable.h', sondern in der Kopfzeile davor enthalten. Beachten Sie, dass <stdlib.h> ... ein Noop sein kann, wenn sie vorher enthalten sind.

Wenn Sie sicher, dass Ihre Datei machen wollen mit C++ kompiliert wird, können Sie diesen Code an den Anfang von MasterTable.mm hinzu:

#ifdef __cplusplus 
#error "compiled as C++" 
#else 
#error "compiled as C" 
#endif 
+0

Danke! Du hast recht, ich habe MeterTable.h in eine Nicht-C++ - Datei aufgenommen. Interessanterweise habe ich Ihren Code eingefügt und habe trotzdem den "Compiled as C++ error" erhalten. Ich bin mir nicht sicher, was dort vor sich geht. Wie auch immer, ich bin wieder auf der Strecke, also vielen Dank! – niels

+0

Wieder wird die Headerdatei sowohl in C++ - als auch in Nicht-C++ - Kontext enthalten sein. Wenn Sie #Fehler zu #Warnung ändern, sollten Sie beide sehen – mfazekas

0

Try #include Direktiven mit extern "C" { }

3

die folgenden Dinge tun und dann versuchen:

  1. Gehen Sie auf die Build-Einstellung und Suche „Compile Quellen“
  2. Wählen Sie „nach Dateityp“
  3. Wenn Sie includin g CPP-Datei in einer Ihrer Objective C-Klasse, dann sollte die Implementierungsklasse .mm sein, ändern Sie einfach ihre Erweiterung in .mm from.m.
  4. Denken Sie daran, auch wenn Sie CPP-Code hierarchisch verwenden, müssen Sie die Erweiterung in .mm ändern.