OpenCV中奇怪的无与伦比的大括号

Jum*_*hyn 3 iphone opencv objective-c

我正在使用适用于iPhone的OpenCV版本,我遇到了一些奇怪的错误.在使用拼接器时,一些导入的标题现在正在抱怨此行上无法匹配的"{":

enum { NO, FEATHER, MULTI_BAND };
Run Code Online (Sandbox Code Playgroud)

NO 来自objc.h的宏,定义为

#define NO              __objc_no
Run Code Online (Sandbox Code Playgroud)

并且编译器期望'}'匹配枚举的开头,即使稍后有一个.怎么了?

Chr*_*ris 11

我一直有同样的问题,我刚刚发现了一个解决方法.正如你所说的那样,在UIKit中定义NO-makro是一个问题.你需要做的是转到.pch文件并替换

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
Run Code Online (Sandbox Code Playgroud)

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#import <opencv2/stitching/detail/blenders.hpp>
#import <opencv2/stitching/detail/exposure_compensate.hpp>
#endif
Run Code Online (Sandbox Code Playgroud)

所以你得到的.pch应该是这样的:

//
// Prefix header for all source files of the 'Project' target in the 'Project' project
//

#import <Availability.h>

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#import <opencv2/stitching/detail/blenders.hpp>
#import <opencv2/stitching/detail/exposure_compensate.hpp>
#endif

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
Run Code Online (Sandbox Code Playgroud)

这样,在UIKit中的NO-makro之前定义了blenders.hpp和exposure_compensate.hpp中的NO-enums.


Sri*_*ija 6

Swift:在 .mm 文件中,您只需在调用任何 OpenCV 标头之前从 UIKit 取消定义“NO”宏即可。

#import "OpenCVWrapper.h"
#undef NO
#import <opencv2/opencv.hpp>
Run Code Online (Sandbox Code Playgroud)