我在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吗?与搜索标题路径相关的东西?
我只需要使用字符串类型。
非常感谢提前
答案 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 不擅长检测混合来源。