XCODE 7和OpenCV(不SWIFT):COR.HPP报头必须编译为C++

XCODE 7和OpenCV(不SWIFT):COR.HPP报头必须编译为C++,c++,ios,objective-c,xcode,opencv,C++,Ios,Objective C,Xcode,Opencv,我已经学习了如何在iOS项目上安装OpenCV。然而,当使用Xcode 7时,我不得不手动添加前缀头。不幸的是,这样做没有帮助,我仍然会遇到编译错误。然后,我读了另一篇文章,建议最好手动添加导入,而不要在Xcode 7中使用前缀头,所以我这样做了 这是我的密码: #import "ViewController.h" #import <opencv2/opencv.hpp> #import <UIKit/UIKit.h> #import <Foundation/Fo

我已经学习了如何在iOS项目上安装OpenCV。然而,当使用Xcode 7时,我不得不手动添加前缀头。不幸的是,这样做没有帮助,我仍然会遇到编译错误。然后,我读了另一篇文章,建议最好手动添加导入,而不要在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
然而,我仍然得到以下错误

当我使用名称空间cv取消注释时;我得到以下信息:

我发现了一些复杂的解决方案,比如向Swift公开标题等等。。我只想让我的项目在Objective-C上使用Xcode 7

> Popencv是一个C++框架,这意味着任何使用OpenCV的代码都必须用C++解释编译,而不是C解释。 您看到的错误,例如使用名称空间cv;指示代码是使用objective-C编译器而不是objective-C++编译器编译的

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

或者,通过在“实用程序”窗格中为文件类型显式选择Objective-C++Source选项,可以选择并覆盖文件类型。
我也有同样的问题。我在OpenCV的Swift项目中工作

关于Swift,它的OpenCV入口点是一个我称为OpenCVWrapper的文件。所以我得到了OpenCVWrapper.h和OpenCVWrapper.mm。在我的项目的桥接头中,我得到了importopencvwrapper.h

问题是我想在Objective-C++中编写一个名为MatUtils的类,我可以从OpenCVWrapper.mm调用它。为了能在里面看到它们,我必须把它们放在MatUtils.h

长话短说,错误在于在OpenCVWrapper.h中,我确实导入了MatUtils.h。错误由于OpenCVWrPrAPER在桥接头中,C++现在可以从SWIFT!p> 快速修复:在OpenCVWrapper.mm中导入MatUtils.h

干杯!
在导入VIEW控制器之前,请将导入< opcnv2/opcv.Hpp>。我们的解决方法与我们连接ObjvEC和Swift几乎相同,但是我们在目标C和C++之间进行了,所以我们将C++代码放在一个单独的文件中,将.mx扩展,然后导入到您的目标C文件中。 例如,如果你有VIEWController .h和VIEWController .m,你可以添加两个文件,其中包括C++代码,让它命名为OpenCV.mm和OpenCV.h,然后在VIEWController。M中导入opencv.h,甚至在导入任何其他东西之前。 可能这张图片有助于理解它:


在XCODE 11.6上的OpenCV 3.3.4.3/P>测试代码需要C++的特性;你必须使用目标C++,而不是目标C。最快的“解决方法”是将.m文件重命名为.mm;但这是在踢你现在在这条路上写C++的事实。我试过了,但是它还是不行。你有没有这样做?谢谢你的清楚解释。我明天会试试这个,让你知道我的进展如何。。干杯,非常感谢您的回复:@mm24您解决过这个问题吗?我面临着同样的问题,但似乎所有的解决方案都不起作用/我不得不停止这方面的工作,找到另一种解决办法。我试过了,但还不足以证实它是否有效。我接受,因为它有4张赞成票,听起来很合理。只是遇到了类似的问题。几分钟后,我意识到我可以在.mm中重新打开接口,并将实例属性放在其中,而不是主包装器.h,否则会将我放入递归中:-是的!我想你是在关注这篇文章,这不是很清楚,谢谢。你好,我确实是在关注那篇文章,因为我是写这篇文章的人哈哈。我要更新那篇文章,有些东西已经过时了:@bRo,你更新了吗?我有同样的问题,但我遵循了与你的文章和其他文章相同的步骤。还没有,我很快就会找到时间,我保证:谢谢。这张照片确实有助于把事情弄清楚。