【问题标题】:When including a C++ header file from an Objective-C header file it has compiling error, iostream not found从 Objective-C 头文件中包含 C++ 头文件时,会出现编译错误,找不到 iostream
【发布时间】:2014-05-07 17:47:48
【问题描述】:

TestViewController.h/TestViewController.mm

HelloWorld.h/HelloWorld.cpp

如果我在 TestViewController.mm 中包含“HelloWorld.h”,它编译得很好。当我将“HelloWorld.h”包含到 TestViewController.h 中时,它会提示错误:找不到 'iostream' 文件。

我的 HelloWorld.h 代码是一个简单的标准 cpp 文件。

#ifndef __MixedCppTest__HelloWorld__
#define __MixedCppTest__HelloWorld__

#include <iostream>
#include <vector>

class HelloWorld {


public:
    HelloWorld();
    ~HelloWorld();
};
#endif /* defined(__MixedCppTest__HelloWorld__) */

【问题讨论】:

  • Objective-C 和 C++ 不兼容。您需要使用 Objective-C++。
  • Additional 我可以将 Compile Source As 更改为 Objective-c++,但是还有其他方法可以解决吗??

标签: c++ ios objective-c xcode objective-c++


【解决方案1】:

你可以使用宏

#ifdef __cplus
 // TODO Code
#endif

参考:Link

【讨论】:

  • 谢谢,但我提到哪个文件使用这些宏?我需要使用 HelloWorld 类。
  • 在 .h 文件中。我也放了参考链接。请访问它。
  • 应该是__cplusplus
  • 感谢您的解决方案,但我想在此 cpp 文件中使用一些枚举。它只能在一段时间内使用。这不是问题的本质。
  • 所以将 C++ 标准库类隐藏在 .mm 文件中,不要在 .h 文件中提及它们。创建一个不使用 C++ 标准库语义的枚举语义。
【解决方案2】:

当我在 TestViewController.h 中包含“HelloWorld.h”时,它会提示 错误:找不到“iostream”文件……

是否有任何导入 TestViewController.h 的 Objective-C 文件? 在预处理阶段,头文件成为翻译单元的一部分(与源文件一起),如果您要求将此类头文件(包含 c++ 库和 c++ 类定义)包含到 Objective-C 源文件中 - 那么不,这是不可能的。如果您正在寻找一种将 .cpp 和 .m 源文件编译并链接到一个二进制文件的方法,您可以制作 .mm 包装单元将它们连接在一起。

【讨论】:

  • 关键是如果你间接导入cpp文件,你应该把导入链上的所有文件都改为objective-c++编译模式。我的问题是 AppDelegate.m 没有更改为 .mm
  • 您是在尝试解决任何特定问题还是只是进行侦察?在第二种情况下,很容易给自己设置一个根本不需要解决的无法解决的任务。
【解决方案3】:

感谢https://stackoverflow.com/users/635608/mat 的回答。

它只有一个标准的解决方案,那就是让编译器知道指定的源应该编译为objective-c++。

只有三种方式:

  1. 将 .m 更改为 .mm

  2. 在 xcode 编辑器的实用工具面板中将类型更改为 Objective-c++。

  3. 将“编译源代码为”改为objective-c++

如果间接导入cpp文件,则应将导入链上的所有文件改为objective-c++编译模式。

【讨论】:

  • 所以你的解决方案是将你所有的Objective-C文件编译为Objective-C++?这是一个糟糕的解决方案,还有更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2010-10-17
  • 2011-02-25
  • 2021-11-30
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
相关资源
最近更新 更多