OpenCV中奇怪的不匹配大括号



我正在使用iPhone版本的OpenCV,我遇到了一个有点奇怪的错误。在使用缝合器时,一些导入的头文件现在抱怨这一行有一个不匹配的"{":

enum { NO, FEATHER, MULTI_BAND };

NO是来自object .h的宏,定义为

#define NO              __objc_no

编译器期望有一个'}'匹配枚举的开头,即使稍后才有一个。发生了什么?

我一直有同样的问题很长一段时间,我刚刚发现了一个解决方案。正如你正确地指出的,这是UIKit中NO-makro定义的问题。你需要做的是找到你的。pch文件,替换

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#import <opencv2/stitching/detail/blenders.hpp>
#import <opencv2/stitching/detail/exposure_compensate.hpp>
#endif
所以你得到的。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

这样,在blender .hpp和exposure_compensation .hpp中的no -enum在UIKit中的NO-makro之前被定义。

Swift:在你的。mm文件中,你只需要在调用任何OpenCV头文件之前从UIKit中取消定义'NO'宏。

#import "OpenCVWrapper.h"
#undef NO
#import <opencv2/opencv.hpp>

我为Swift用户使用了一个更简单的修复。

在我的.mm文件中,我将.h导入移到了#import<opencv2/opencv.hpp>下。

希望这对你有帮助!

我更改了代码-

//    enum { NO, FEATHER, MULTI_BAND };
    enum { NO_EXPOSURE_COMPENSATOR =  0, FEATHER, MULTI_BAND };

它适合我。谢谢。

相关内容

  • 没有找到相关文章

最新更新