【问题标题】:xcode 4.6 iostream file not found error?xcode 4.6 iostream 文件未找到错误?
【发布时间】:2013-03-08 14:33:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • 哪些源文件包含该头文件?不是.m吗?

标签: c++ iphone iostream


【解决方案1】:

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

为什么?

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

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

替代解决方案

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

【讨论】:

  • 它有帮助,谢谢~,但我不知道为什么。这是一个约定(将 UIAppDelegate.m 更改为 UIAppDelegate.mm)吗?
  • @Joey .m 文件表示一个 Obj-C 文件。而 .mm 表示 Obj-C++ 文件。这不是一个真正的约定,但它是强制性的,具体取决于您使用的语言偏好。
  • @Steven Thx 为您解释。
【解决方案2】:

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

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

【讨论】:

  • 你从哪里得到这个答案?请提供源链接,
  • 拜托,你能解释一下为什么能解决这个问题吗?另一个帖子是哪一个?
猜你喜欢
  • 2020-02-02
  • 2012-12-31
  • 2021-04-16
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多