【问题标题】:Include <string> not found compile error in Xcode 4.2在 Xcode 4.2 中包含 <string> 未找到编译错误
【发布时间】:2021-08-18 17:46:56
【问题描述】:

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

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

这是我的 .h 文件;

TestLog.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

TestLog.mm

#include "TestLog.h"

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

}

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

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

非常感谢您提前

【问题讨论】:

  • 当然看起来它应该工作...但是,你有什么理由不使用 NSString 代替吗?
  • 看起来XCode默认不包含std路径,我想你需要手动完成。还要避免在 .h 文件中使用 using 在实现文件中使用或根本不使用它。

标签: c++ objective-c xcode string header


【解决方案1】:

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

Compile Sources As 中更改为Objective-C++

【讨论】:

  • 小改动:选择目标 -> 构建设置。搜索“编译源”,更改为Objective-C++。 (现在在 Apple Clang - Language 下)。
【解决方案2】:

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>

【讨论】:

  • 很好的答案!谢谢!我以为我疯了...将我的 xcode 从 7 升级到 8,突然之间我的 C++ 代码无法识别...谢谢!
【解决方案3】:

我认为您需要包含到库的整个路径。类似于说“基础”和“uiview”框架。

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      #if defined __cplusplus
        declarations
      #endif
      

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

      Expected ; after top level declarator, error in xcode

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-14
          • 2013-01-12
          • 1970-01-01
          • 2012-03-07
          • 1970-01-01
          相关资源
          最近更新 更多