在XCode中桥接C ++和Swift,什么是正确的构建设置?

时间:2015-03-31 19:37:52

标签: c++ c xcode swift interop

当我尝试调用我的C ++实现文件中的函数时(在#ifdef __cplusplus extern“C”{}技巧的标题中标记为C兼容),我收到错误:

“使用未解析的标识符'helloWorld()'”

我只是通过向项目添加cpp和头文件并在询问是否要创建桥接头时单击“确定”来创建桥接头。我在桥接头中#including“test.h”,里面有函数声明,但由于某种原因,Swift看不到该函数。

最奇怪的部分是,我创建了一个新项目,并且执行了相同的EXACTWorld(),并且调用helloWorld()工作正常,所以我正在尝试将cpp文件添加到现有项目中

我当时假设这是一个构建设置问题,并且我必须把它们搞砸到某个地方,可能是在我尝试导入静态C / CPP库时(我已经删除了) ,但我改变的一些构建设置可能仍然存在)。

那么我应该知道的任何构建设置会解决这个问题吗?或者有没有办法将我的构建设置完全重置为默认值(即使这意味着我必须重新创建桥接头以使桥接头构建设置恢复原位)?

感谢您的帮助!

詹姆斯

--- ---编辑

这是我的cpp标题:

Test.h

这是我的cpp实现文件:

Test.cpp

这是我的桥接标题:

HawkEye-Bridging-Header.h

以下是Swift项目的相关部分:

viewDidLoad in viewController.swift

以下是设置桥接标头的构建设置:

Relevant build setting

2 个答案:

答案 0 :(得分:1)

好的 - 这已经解决了。问题是需要从常规目标和测试目标实现桥接头,这是我现有项目中的原因,因为我正在进行单元测试。

我只是进入测试目标的构建设置并添加了适当的Objective-C桥接头,然后一切正常。

希望它有所帮助!

答案 1 :(得分:0)

我有同样的经历。确保添加单元测试目标,然后确保单元测试目标可以看到桥接头文件。

我犯的另一个错误;确保每个Swift类,测试用例中使用的枚举都正确设置了目标成员资格。

enter image description here