1

主に C++ で作成されたプロジェクトがありますが、Objective-C++ ライブラリにリンクしようとしています。次のようなヘッダーがあります。

CPlus.h:

#import "OBJCObject.h"

class CPlus {
  OBJCObject *someObj;

};

CPlus.mm:

CPlus::CPlus() {
  someObj = [[OBJCObject alloc] init];
}

Objective-C++ ヘッダーをコードにインポートすると、iPhone SDK 内から何千ものエラーが発生します。何かが、ある言語を別の言語であるかのように扱っているようです。この説明が不十分でしたら申し訳ありません。私はこれが初めてで、やや混乱しています。

Objective-C / Objective-C++ 型を C++ クラスに含めることはできますか? 他のタイプのヘッダーを含めるために何か特別なことをする必要がありますか?

4

2 に答える 2

3

#importObjective-C (.m) ファイルから CPlus.h を実行していますか? その場合、C セマンティクスでコンパイルされており、Objective-C++ に対応していないため、C++ クラスを理解できません。.m コンパイラはclass、何をすべきかを認識し、認識しません。

ソース ファイルが .mm である限り、Objective-C オブジェクトを C++ クラス定義に含めることができ、その逆も可能です。

于 2009-07-03T20:53:30.713 に答える
0

次のビルドは、IPhone SDK で正常に動作します。必ず c++ コンストラクターを宣言し、.mm ファイルに実装してください。

OBJCObject.h

#import <Foundation/Foundation.h>

@interface OBJCObject : NSObject {
}

@end

OBJCObject.m

#import "OBJCObject.h"

@implementation OBJCObject

@end

CPlus.h

#import "OBJCObject.h"

class CPlus {
    OBJCObject *someObj;
    CPlus();
};

CPlus.mm

#include "CPlus.h"

CPlus::CPlus() {
    someObj = [[OBJCObject alloc] init];
}
于 2009-07-03T20:59:55.147 に答える