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.
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:
Persönlich würde ich
%Vor%statt es zu importieren.
Das ist aber wahrscheinlich nicht dein Problem.
Tags und Links objective-c c++ cocoa wrapper