将C++和Objective C包含到Swift框架中

3
我正在尝试构建一个包含C ++和OpenCV框架的Swift框架,用于iOS。据我所知,我们不能在框架中使用桥接头文件,我们必须处理伞头文件。我的问题是XCode没有将C++文件处理为C++,这种编译器错误如下:
Unknown type name 'class'; did you mean 'Class'? 它还找不到<iostream>。我目前有一个包含我的C++文件的objc包装器的伞。正确的方法是什么?以下是我的框架伞头文件。
#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#else
    #ifndef FOUNDATION_EXPORT
        #if defined(__cplusplus)
            #include <iostream>
            #define FOUNDATION_EXPORT extern "C"
        #else
            #define FOUNDATION_EXPORT extern
        #endif
    #endif
#endif

#import "AGImageDescriptor.h"
#import "AGKitLib.h"
#import "Detector.h"
#import "Observable.h"
#import "Shooter.h"
#import "DocumentDetectedState.hpp"
#import "DocumentMatchState.hpp"
#import "GoodPerspectiveState.hpp"
#import "GoodPositionState.hpp"
#import "InactiveState.h"
#import "ReadyState.hpp"
#import "StartState.h"
#import "State.h"
#import "States.h"
#import "TextDetectedState.hpp"
#import "Tools.hpp"
#import "OpenCVWrapper.h"
#import "UIImage+OpenCV.h"

FOUNDATION_EXPORT double AGKitScanVersionNumber;
FOUNDATION_EXPORT const unsigned char AGKitScanVersionString[];

我并不是一个C++专家,也不是C语言专家,所以我可能会漏掉一些东西。

1个回答

2
您收到的错误提示表明,您的 umbrella header 可能直接或间接包含了 C++ 代码。事实上,我看到了很多 .hpp 文件,这些文件可能是 C++ 头文件。由于框架中存在 Swift 代码,因此您不能这样做。所有的 C++ 代码必须限制在 Objective-C++ 包装器的实现文件中(使用 .mm 扩展名,而不是用于 Objective-C 文件的 .m 扩展名)。Objective-C++ (.mm) 文件可以使用混合的 C++ 和 Objective-C 代码,并包括必要的 C++ 头文件。
以下是一些问题/答案,可能会有所帮助:Unknown type name 'class'; did you mean 'Class'?Video processing with OpenCV in IOS Swift project

抱歉回复迟了。那对我帮助很大 :) 的确,每个C++文件都应该在总头文件内声明。谢谢! - Akhu
@Akhu能否更新您的问题,包括最终的Umbrella Header细节。我也想做同样的事情,但从未听说过Umbrella Header,因此不知道需要将其放在哪里。谢谢。 - Duncan Groenewald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接