1

我面临一个关于在头文件中找不到 iostream 文件的问题。我刚刚在我的项目中添加了一个 c++ 文件,一个头文件也默认包含一些宏定义,并将 iostream 文件包含为

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

但在这一行,我在包含行出现错误

在此处输入图像描述

我用谷歌搜索了很多,并找到了各种类型的答案。但是没有人能够纠正我的错误。请帮忙谢谢!

4

2 回答 2

3

你不需要<iostream>在你的头文件中,把它放在你的 .cpp 文件中。您没有在头文件中引用 iostream 库中的任何内容,使用此库更多的是实现细节。

为什么?

我相信 UIAppDelegate 导入 UIViewController.h,其中包括 MathUtils.h。因为 UIAppDelegate 的实现在一个 .m 文件中,它是为 Objective-C 编译的,并且这个包含链(全部基于头文件)包含 C++ 的东西。因此,Objective-C 部分无法找到<iostream>,因为纯 Obj-C 中不存在该库。

将其放入您的 .cpp 文件中会将其限制为一个编译单元,即 MathUtils 单元。将它放在头文件中会将它包含在所有编译单元中,这些编译单元依赖于使用它的任何东西,可能不是 Objective C++。

替代解决方案

您可以将整个项目作为 Objective C++(在这种情况下,通过将 UIAppDelegate.m 更改为 UIAppDelegate.mm),这意味着 C++ 可以在整个过程中使用。我不喜欢这种方法,它可能会掩盖不良的编码习惯。

于 2013-03-08T14:46:32.997 回答
0

我从另一个帖子中得到了解决方案:

使用 .mm 扩展名而不是 .m 重命名您的实现文件将解决该问题。

于 2015-11-20T22:54:45.297 回答