【问题标题】:Xcode 8 (Swift): core.hpp header must be compiled as C++Xcode 8 (Swift):core.hpp 标头必须编译为 C++
【发布时间】:2017-08-10 12:42:53
【问题描述】:

我在一个项目中使用 OpenCV iOS 框架。我按照必要的步骤将框架包含到项目中。

该项目是使用 Swift 3 编写的。

我的一个包含应用程序核心功能的类是用 Objective-C++ 编写的。我在我的 Bridge-header 文件中包含了类的标题,但是在尝试运行项目时出现以下错误:

错误 core.hpp 头文件必须编译为 C++

在网上和 SO 上进行研究后,提出的最常见的解决方案是创建一个 Wrapper 类,该类将被导入到桥头中。但是,在关注此article 之后,我遇到了同样的问题。

我班级的头文件是这样的:

#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#define IMAGE_CLASS UIImage
#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#define IMAGE_CLASS NSImage
#endif

#import <AGGeometryKit/AGKQuad.h>

#import <stdio.h>
#import <opencv2/opencv.hpp>

#import <Foundation/Foundation.h>

typedef void (^DebugBlock)(cv::Mat current_image, std::string current_image_name);

@interface ImageScanner : NSObject

/**
 *  Singleton for access to the scanner.
 *
 *  @return Shared scanner.
 */
+ (instancetype)sharedScanner;

有人知道我可能缺少什么吗?

提前感谢您! G.

【问题讨论】:

  • 桥接头文件被编译为 (Objective-)C 而不是 C++。您只能从包装类的 implementation (.mm) 文件中包含 .hpp 文件,而不能从 .h 文件中包含该 .hpp 文件(因为它会间接包含在桥接头文件中)。请参阅您链接到的教程中的第 6 步。
  • @MartinR 是的,但是如果我只将它们包含在 .mm 文件中,我该如何在 .h 文件中声明引用 opencv 的属性和方法?
  • 你不能。 no 是 Swift 和 C++ 之间的桥梁。包装器必须公开一个纯 C(或 Objective-C)接口,并且只能在内部使用 C++ 类。
  • 你知道我应该如何处理这个问题吗,因为这些方法对扫描仪的功能很重要?

标签: ios swift xcode opencv


【解决方案1】:

有同样的问题..通过在 wrapperClass.mm 文件中导入任何使用 openCV 的文件来解决...

SO Answer here

【讨论】:

  • 如果您想从 opencv 类继承,这将不起作用。必须编写另一个实现类。在swift中使用C++类真的很麻烦。
猜你喜欢
  • 2016-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多