Kann keine Standard-C ++ - Includes finden, wenn die C ++ - Klasse im Cocoa-Projekt verwendet wird

8

Ich habe ein Cocoa-Projekt (eine Mac OS X-App), alle Objective-C. Ich habe eine C ++ - Klasse (von der ich weiß, dass sie funktioniert) aus einem anderen Projekt übernommen und einen Objective-C-Wrapper dafür erstellt. Die ObjC-Wrapper-Klasse verwendet die Erweiterung .mm. Die C ++ - Header-Datei enthält jedoch #include s zu Standard-C ++ - Header-Dateien ( <vector> , zum Beispiel), und ich bekomme Fehler bei diesen.

Ein minimales Beispiel würde wie folgt aussehen. CppClass ist die C ++ - Klasse und CppWrapper ist die ObjC-Klasse, die es umschließt.

%Vor%

Der Fehler, den ich bekomme, ist der #include von vector in CppClass.h. Der Fehler ist

  

lexikalisches oder Präprozessor-Problem: 'vector' Datei nicht gefunden

Dieser Code funktioniert in einem anderen (alle C ++) Projekt gut, also bin ich mir ziemlich sicher, dass es eine Build-Einstellung ist, oder etwas, das ich in der Wrapper-Klasse falsch gemacht habe. Ich benutze Xcode 4. Ich habe ein Standard-Cocoa Mac OS App-Projekt erstellt und alle Einstellungen sind Standard.

Update : Ich habe gerade festgestellt, dass es funktioniert, wenn ich den Dateityp von TestAppDelegate auf Objective-C ++ (oder in TestAppDelegate.mm umbenennen) setze. Was ich nicht verstehe, ist, dass diese Klasse reines Objective-C ist; Warum muss es als Objective-C ++ kompiliert werden? Der springende Punkt, einen Objective-C-Wrapper für meine C ++ - Klasse zu haben, ist so, dass ich nicht das gesamte Projekt als Objective-C ++ erstellen muss.

    
zpasternack 21.05.2011, 18:50
quelle

2 Antworten

13

Das Problem mit Ihrer CppWrapper -Klasse besteht darin, dass sie keine reine Objective-C-Schnittstelle darstellt. In Ihrer Datei CppWrapper.h importieren Sie die Headerdatei der C ++ - Klasse, was bedeutet, dass jede Objective-C-Klasse, die die Wrapperklasse importiert, als Objective-C ++ kompiliert werden muss, einschließlich Ihrer TestAppDelegate .

Stattdessen müssen Sie etwas tun, um C ++ innerhalb der CppWrapper.mm -Datei vollständig zu verbergen:

%Vor%     
NSGod 21.05.2011, 21:28
quelle
0

Persönlich würde ich

%Vor%

statt es zu importieren.

Das ist aber wahrscheinlich nicht dein Problem.

    
Rhythmic Fistman 21.05.2011 19:22
quelle

Tags und Links