0

iPhoneプロジェクトに追加したいC++ライブラリがあります。

1つのヘッダーファイルで宣言します

@interface a
{
   cppvirtualclass V;
}

これは、リリース設定のあるiPhoneデバイスで正常にコンパイルされます。ただし、デバッグ情報の有無にかかわらず、シミュレーター用にコンパイルすることは拒否されます。

エラーが発生します

error: type 'V' has virtual member functions.

これを回避する方法はありますか、それとも具体的なC ++クラスのみを定義する必要がありますか?

4

2 に答える 2

2

デフォルトでは、Objective Cは、Objective Cオブジェクトを作成するときに、C++インスタンス変数に対してコンストラクターを実行しません。これは(私が思うに)C++オブジェクトのvtableが正しく初期化されないことを意味します。

インスタンス変数をポインタにして、initメソッドで割り当ててみてください(そしてdealloc / finalizeで破棄してみてください)。

または

ターゲットコード生成設定で「C++のデフォルトのCtors/DtorsをOvjective-Cで呼び出す」を設定してみてください。

(GCC_OBJC_CALL_CXX_CDTORS、-fobjc-call-cxx-cdtors)

于 2010-04-09T13:32:11.793 に答える
0

また、Objective-C++ は iPhone 開発用に許可された言語ではなくなりました (4.0 あたり)。Objective-C、C、および C++ を使用できますが、Objective-C++ は使用できません。

于 2010-05-01T20:50:42.187 に答える