1

私はいくつかのObjectiveCファイルとc++ファイルを既存のiOSプロジェクトに追加しました。.mmファイルの.hファイルを対応する.mファイルとともに.hファイルにインポートすると、あらゆる種類のエラーが発生します。

新しいコードをインポートする.hファイルの.mファイルを.mmに変更すると、以前と同じエラーが発生しますが、新しい.mmファイルに関する新しいエラーが発生します。

これを修正する方法がよくわかりません。

これが効果がある場合は、ARCを使用しています。

名前空間(不明なタイプ)、インポートされた.mmファイルでの不明な名前の問題、.mmファイルの.hファイルに::を含むステートメントで予期される式エラーについて不平を言います。私が得られないのは、これらのファイルは、コピー元のプロジェクトで正しく機能するということです。私はプロジェクトからソースを取得しただけです。また、ディレクトリにヘッダー検索パスを追加しました。また、[追加されたディレクトリへの参照を作成する]オプションを選択しました。

何らかの理由で、ファイルはコンパイルソースセクションにありません。ファイルを追加しようとすると、ファイルセレクタツリーに、追加したこれらのソースファイルが含まれていません。追加されたディレクトリも黄色ではなく青色ですが、空です。

4

1 に答える 1

3

ご存知のように、C++コードは.mmファイルからのみ使用できます。コンパイラが不明なタイプであると文句を言う場合namespace、それは通常、ObjectiveC++コンパイラを使用する必要があるときにObjectiveCコンパイラが使用されていることを意味します。もっと簡単に言うと、.mmである必要がある.mファイルがあります。

一般的に言えば、あなたが追求できる2つのオプションがあります。Objective Cファイルが文句を言うたびに、それを.mmに変更します。これは滑りやすい坂道であり、通常、プロジェクト全体がObjectiveC++の巨大なボールにカスケードされます。もう1つのオプションは、C ++を隔離することです。これにより、ObjectiveCファイルの最小限の拡張子のみが.mm拡張子を必要とします。

明らかに、後者がより良い選択です。混乱の原因として考えられるのは、実際にはC++を必要としないアプリの他の場所からC++コードを含むヘッダーファイルをインポートすることです。C++がObjectiveCクラスの実装の詳細である場合は、クラス拡張機能を利用して、C++をクラスのヘッダーファイルから除外することができます。それ以外の場合は、他のクラスが使用できるようにクリーンなヘッダーファイルを公開しながら、C++を独自の実装でラップすることを唯一の目的とするObjectiveCクラスを作成できます。

基本的に、ヘッダーをクリーンに保つことができれば、C++を疑うことを知らないコンパイルユニットに誤って間接的にインポートすることを心配する必要はありません。

于 2012-07-24T00:02:05.273 に答える