在一个 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/