混合使用Objective-C和C ++和OpenCV

问题描述

| 我正在编写iPhone应用程序的代码,并且正在使用OpenCV进行某些图像处理。到目前为止,我仅在普通C语言中使用过它,但是现在我需要使用C ++创建一些基本的OCR。 我首先创建了一个.h / .cpp文件,它似乎可以正常编译。但是我需要将其与一些Objective-C混合使用以打开图像等等。然后,我将文件重命名为.mm而不是.cpp,但是它无法编译! 我收到此错误: OpenCV core.hpp第432行中的“仅在函数内部允许使用语句表达” 第432行是此行:
typedef Matx<_Tp,MIN(m,n),1> diag_type;
任何想法为什么会发生这种情况?     

解决方法

我遇到过同样的问题。我在UIKit标头之前导入了Open-CV标头。确保在pch文件中执行此操作。问题在于UIKit和OpenCV中都定义了一些宏。 资料来源:http://computer-vision-talks.com/2011/01/using-opencv-in-objective-c-code/ 毛尼尔     ,我实际上依赖于此人提供的私有框架(和示例项目):http://aptogo.co.uk/2011/09/opencv-framework-for-ios/ 我设法使用与样本中相同的方法在我的Objective-C mac应用程序中使用。即,在.PCH文件中使用import指令,对于依赖于任何OpenCV C ++代码/类的Objective-C文件使用.mm。     ,至少在xcode 4.5中值得一提的另一件事(无关)是,必须在目标设置中将C ++标准库更改为\'libstdc ++ \',才能编译openCV。     ,必须在UIKit.h和Foundation.h之前包含OpenCV标头,因为OpenCV定义了一个MIN宏,该宏与Apple框架定义的MIN函数冲突。如果在UIKit.h和Foundation.h之后包含OpenCV标头,则会收到诸如“ LLVM GCC 4.2错误:仅在函数内部允许语句表达式”之类的编译错误。首先包含OpenCV标头,并在__cplusplus条件测试中包含#import可以避免此问题,这意味着您仍可以将普通的Objective-C用于项目中未调用OpenCV API的'.m'文件。 http://aptogo.co.uk/2011/09/opencv-framework-for-ios/