当包含来自Objective-C头文件的C ++头文件时,它有编译错误,找不到iostream

时间:2014-05-04 10:52:17

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

TestViewController.h / TestViewController.mm

HelloWorld.h / HelloWorld.cpp

如果我包含" HelloWorld.h"进入TestViewController.mm它编译得很好。当我包含" 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__) */

3 个答案:

答案 0 :(得分:0)

你可以使用宏

#ifdef __cplus
 // TODO Code
#endif

参考:Link

答案 1 :(得分:0)

  

当我包含&#34; HelloWorld.h&#34;进入TestViewController.h它提示   错误:&#39; iostream&#39;找不到文件......

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

答案 2 :(得分:0)

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

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

只有3种方式:

  1. 将.m更改为.mm

  2. 在xcode编辑器的Utilities面板中将Type更改为Objective-c ++。

  3. 更改&#34;将来源编译为&#34;到objective-c ++

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