Xcode 7和openCV(没有Swift):Core.hpp头文件必须编译为C ++

我遵循了如何在iOS项目上安装OpenCV的说明 。 但是,当使用Xcode 7我不得不手动添加一个前缀头。 这样做不幸的是没有帮助,我仍然得到编译错误。 然后我读了另一个post,build议最好手动添加导入,而不是在Xcode 7中使用前缀头,所以我做了。

这是我的代码:

#import "ViewController.h" #import <opencv2/opencv.hpp> #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <opencv2/highgui/cap_ios.h> //using namespace cv; @interface ViewController () { IBOutlet UIImageView* imageView; IBOutlet UIButton* button; } - (IBAction)actionStart:(id)sender; @end 

不过,我仍然有以下错误。

在这里输入图像说明 在这里输入图像说明

当我取消注释using namespace cv; 我得到以下内容:

在这里输入图像说明

我发现了一些复杂的解决scheme,将头文件暴露给Swift等。我只是想让我的项目在Xcode 7上工作在Objective-C上。

OpenCV是一个C++框架,这意味着任何使用OpenCV的代码都必须用C++解释来编译,而不是C解释。

你看到的错误,例如using namespace cv; 表示代码是使用Objective-C编译器编译的,而不是使用Objective-C ++编译器编译的。

正如我在我的评论中提到的,最简单的方法是确保任何包含opencv头文件的文件都必须命名为ViewController.mm ,即它必须是一个Objective-C ++文件。

或者,您可以通过在实用程序窗格中为文件types显式selectObjective-C++ Source选项来select并覆盖文件的Type实用程序窗格下拉选择

我刚刚有完全相同的问题。 我正在使用OpenCV开发一个Swift项目。

关于Swift,OpenCV的入口点是一个叫做OpenCVWrapper的文件。 所以我得到了OpenCVWrapper.h和OpenCVWrapper.mm。 在我的项目的桥头,我得到了#import“OpenCVWrapper.h”。

事情是我想在Objective-C ++中编写一个名为MatUtils的类,我可以从OpenCVWrapper.mm调用它。 为了让他们在那里可见,我必须把他们放在MatUtils.h。

长话短说,错误在于在OpenCVWrapper.h中,我做了#import“MatUtils.h”。 错误!!!! 由于OpenCVWrapper在桥接头中,C ++现在可以从Swift中访问!

快速修复:在OpenCVWrapper.mm中#import“MatUtils.h”!

干杯! BRO