1

ヘッダー ファイルに iostream ファイルが見つからないという問題に直面しています。プロジェクトに c++ ファイルを追加したところ、ヘッダー ファイルもデフォルトでいくつかのマクロ定義とともに含まれ、iostream ファイルが次のように含まれています。

#ifndef __ObjectiveCPlus__File__
#define __ObjectiveCPlus__File__
#include <iostream>
#endif

しかし、この行では、インクルード行で次のようにエラーが発生しています

ここに画像の説明を入力

私はそれをよくグーグルで検索し、これに関するさまざまなタイプの回答を見つけました.しかし、誰も私のエラーを修正できません. 助けてくださいありがとう!

4

2 に答える 2

3

ヘッダー ファイルには必要ありません<iostream>。.cpp ファイルに入れます。ヘッダー ファイルの iostream ライブラリの何も参照していません。このライブラリを使用することは、実装の詳細です。

なんで?

UIAppDelegate は、MathUtils.h を含む UIViewController.h をインポートすると思います。UIAppDelegate の実装は .m ファイルにあるため、Objective-C 用にコンパイルされており、この一連のインクルード (すべてヘッダー ファイルに基づいています) には C++ が含まれています。<iostream>そのため、そのライブラリは純粋な Obj-C には存在しないため、Objective-C 部分は を見つけることができません。

これを .cpp ファイルに入れると、MathUtils ユニットという 1 つのコンパイル ユニットに制限されます。それをヘッダーファイルに含めると、それを使用しているものに依存するすべてのコンパイル単位に含まれます。これは、Objective C++ ではない可能性があります。

代替ソリューション

プロジェクト全体を Objective C++ にすることができます (この場合、UIAppDelegate.m を UIAppDelegate.mm に変更します)。これは、C++ を全体で使用できることを意味します。私はこの方法のファンではなく、悪いコーディング プラクティスを覆い隠す可能性があります。

于 2013-03-08T14:46:32.997 に答える
0

別の投稿から解決策を得ました:

実装ファイルの名前を .m ではなく .mm 拡張子に変更すると、問題が解決します。

于 2015-11-20T22:54:45.297 に答える