在Xcode 4.2中包含<string>未找到的编译错误</string>

时间:2012-04-26 00:52:31

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

我在XCode中遇到包含未找到的编译错误。我有一个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吗?与搜索标题路径相关的东西?

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

非常感谢提前

5 个答案:

答案 0 :(得分:8)

选择项目 - &gt;构建设置 - &gt; apple LLVM编译器5.1 - &gt;语言

Compile Sources As更改为Objective-C++

答案 1 :(得分:4)

XCode中有一个怪癖。我在7.3中注意到了它。大多数项目都识别.mm文件和STL,而我曾经没有一个项目。修复是我必须单击左上角的项目图标,然后单击目标&gt;构建阶段&gt; Link Binary with Libraries&gt;并添加AppKit.framework。接下来,我不得不点击Targets&gt;构建设置&gt;搜索&#34;编译源&#34;,并将其设置为&#34; Objective C ++&#34;在所有可能的列上。然后,从“产品”菜单中执行“清理”和“构建”。然后编译正确。然后,再次返回到Compile Sources并将其设置回&#34;根据文件类型&#34;在所有可能的列上。然后,再次单击“产品”菜单中的“生成”。那时,它编译得恰当,并允许我使用&#34;根据文件类型&#34;选项,我更喜欢。

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

#import <Cocoa/Cocoa.h>

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

#import <Foundation/Foundation.h>

答案 2 :(得分:1)

我相信你需要包括图书馆的整个路径。同样地说“基础”&amp; “uiview”框架。

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

#if defined __cplusplus
  declarations
#endif

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

Expected ; after top level declarator, error in xcode