16

我在 XCode 中遇到 include not found 编译错误。我有一个 iOS 应用程序项目,我使用 Objective-c 和 c++ 作为混合。

最初,我在我的 ios 项目中创建了一个 .h 文件和一个 .cpp 文件。然后,我将 .cpp 文件重命名为 .mm 文件。

这是我的 .h 文件;

测试日志.h

#ifndef CalculatorDemo_TestLog_h
#define CalculatorDemo_TestLog_h
#include <string>
using namespace std;

class TestLog
{
private:
    string logString;
public:
    void Log(string logMessage);
};


#endif

测试日志.mm

#include "TestLog.h"

void TestLog::Log(string logMessage)
{
    //this->logString->append(logMessage);

}

我错过了什么?我需要将 std c++ 库添加到我的 targetS 吗?与搜索标题路径相关的东西?

我只需要使用字符串类型。

非常感谢提前

4

6 回答 6

9

选择项目 -> 构建设置 -> 苹果 LLVM 编译器 5.1 -> 语言

Compile Sources As更改为Objective-C++

于 2014-07-25T07:38:06.653 回答
3

XCode 中有一个怪癖。我在 7.3 中注意到了它。大多数项目都能识别 .mm 文件和 STL,而我没有一个项目。解决方法是我必须单击左上角的项目图标,然后单击 Targets > Build Phases > Link Binary with Libraries > 并添加 AppKit.framework。接下来,我必须单击 Targets > Build Settings > 在“Compile Sources”上搜索,然后在所有可能的列上将其设置为“Objective C++”。然后,从“产品”菜单中执行“清理”和“构建”。然后正确编译。然后,再次回到那个编译源并在所有可能的列上将其设置回“根据文件类型”。然后,再次从 Product 菜单中单击 Build。那时,它正确编译并允许我使用我更喜欢的“根据文件类型”选项。

哦,如果做 Cocoa 的事​​情,不要忘记在你的文件中添加以下标题:

#import <Cocoa/Cocoa.h>

如果做命令行的事情,不要忘记添加以下内容而不是 Cocoa 标头:

#import <Foundation/Foundation.h>
于 2016-06-24T03:33:48.743 回答
1

我相信你需要包括图书馆的整个路径。类似于说“基础”和“uiview”框架。

#import <Foundation/Foundation.h>

或者

#import <UIKit/UIKit.h>

是的,确保将库添加到目标。

于 2012-04-26T04:25:39.203 回答
1

所以我在 Cocoapods 库绕过时遇到了这个问题,这些解决方案都没有做任何事情。问题出在 Cocoapods 创建的称为伞头文件的文件上。这位于<POD_NAME>/Support Files/<POD_NAME>-umbrella.h. 删除它,它应该构建得很好。

现在解释为什么这是必要的:伞头文件将 C++ 和 Objective-C 代码直接混合在一个头文件中,这显然是一个很大的禁忌,最终完全破坏了 C++ 导入。通过删除它(这似乎没有效果?)Cocoapods 在不知不觉中创建的这种冲突导入将消失。

于 2018-02-18T01:42:10.073 回答
0

使用 xcode 12.4 和一个 Objective-c 项目遇到了这个问题,但我需要一个 C++ 模块。解决方案:将.h文件的内容包装在:

#if defined __cplusplus
  declarations
#endif

显然 xcode 不擅长检测混合来源。

预期;在顶级声明符之后,xcode中的错误

于 2021-04-18T09:13:26.690 回答
0

当 Xcode 不理解您导入到 Objective-C 的 C++ 头文件实际上是用于 C++ 代码时,通常会发生这种情况。

所以你可以通过找到导入C++代码的Objective-C文件来解决这个问题,只需将其扩展名从更改.m.mm

于 2021-08-18T09:46:56.920 回答