c++ - 使用 Swift 桥接 header “C 不支持默认参数”

标签 c++ ios swift xcode

在一个 iOS Swift 项目中,我包含了一组使用 C++ (HikVision/hcnetsdk.h) 构建的库,虽然我已经成功构建了框架,但头文件不会编译,并且 Xcode 给出我有多个“C 不支持默认参数”。

例如这一行:

NET_DVR_API BOOL __stdcall NET_DVR_SetConnectTime(DWORD dwWaitTime = 3000, DWORD dwTryTimes = 3);

我已经检查了项目的build设置,据我所知,所有内容都设置为使用 C++,所以我很困惑为什么 Swift 将其编译为 C,并提示默认参数。

我的桥接头文件如下:

#import "ldapTest.h"
#import "hcnetsdk.h"
#import "HikDec.h"

我相当确定这是某个地方的build设置,但我不知道是哪一个。

最佳答案

事实证明,您不能将包含 C++ 特定关键字的 C++ 头文件包含到 Swift 桥接头文件中。

针对我的具体情况,我确实设法找到了“C++” header 的“C”替代品,并进行了一些细微的调整。

这是我在网上找到的 HikVision HCNetSDK.h 的“C”头文件: https://github.com/shulianghe/new-project/blob/master/pro/hcSrc/incCn/HCNetSDK.h

如果有人对其他 C++ 头文件有类似的问题,您可以复制上面链接中的一些 #ifdef __cplusplus 语句,看看它是如何完成的。

关于c++ - 使用 Swift 桥接 header “C 不支持默认参数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53846603/

相关文章:

ios - 如何在 iOS Charts 3.0 中获取最大 y 值的 x 值?

ios - 快速打开文件

swift - 在 NSTextField 中查找单词的矩形/位置

c++ - 在 C++ 中使用具有相同方法的类中调用非成员函数

c++ - 在 C++ 中实现心跳以检查套接字连接的最佳方法是什么?

Ios,相机在启动时卡住(黑屏)

ios - 无法转换泛型协议(protocol)函数类型实现的返回表达式

ios - Swift Firebase 链接两个节点

c++ - qt4 : call of update() on a single QGraphicsItem causes paint() on ALL QGraphicsItem

c++ - 为什么要在实例替换 vector 中删除?