Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone OpenCV中奇怪的不匹配的大括号_Iphone_Objective C_Opencv - Fatal编程技术网

Iphone OpenCV中奇怪的不匹配的大括号

Iphone OpenCV中奇怪的不匹配的大括号,iphone,objective-c,opencv,Iphone,Objective C,Opencv,我使用的是iPhone版的OpenCV,我遇到了一个有点奇怪的错误。在使用缝合器时,一些导入的标题现在抱怨此行有不匹配的“{”: enum { NO, FEATHER, MULTI_BAND }; NO是来自objc.h的宏,定义为 #define NO __objc_no 编译器期望一个“}”与枚举的开头匹配,即使稍后会有一个。发生了什么事?我有同样的问题已经很久了,我刚刚发现了一个解决方法。正如你们所说的那个样,这是一个关于UIKit中并没有makro的定义的问

我使用的是iPhone版的OpenCV,我遇到了一个有点奇怪的错误。在使用缝合器时,一些导入的标题现在抱怨此行有不匹配的“{”:

enum { NO, FEATHER, MULTI_BAND };
NO
是来自objc.h的宏,定义为

#define NO              __objc_no

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

我有同样的问题已经很久了,我刚刚发现了一个解决方法。正如你们所说的那个样,这是一个关于UIKit中并没有makro的定义的问题。您需要做的是转到.pch文件并替换

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
\ifdef\uuucplusplus
#进口
#恩迪夫

\ifdef\uuucplusplus
#进口
#进口
#进口
#恩迪夫
因此,生成的.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
//
//“Project”项目中“Project”目标的所有源文件的前缀标头
//
#进口
#ifndef\uuuIphone\u3\u0
#警告“此项目使用仅在iOS SDK 3.0及更高版本中可用的功能。”
#恩迪夫
#ifdef_uucplusplus
#进口
#进口
#进口
#恩迪夫
#ifdef__OBJC__
#进口
#进口
#恩迪夫

这样,blenders.hpp和exposure_compensate.hpp中的NO enum是在UIKit中的NO makro之前定义的。

我为Swift用户使用了更简单的修复方法

在我的
.mm
文件中,我将我的
.h
导入移动到
#import


希望这有帮助

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

#import "OpenCVWrapper.h"
#undef NO
#import <opencv2/opencv.hpp>
#导入“OpenCVWrapper.h”
#未定义编号
#进口
我更改代码-

//    enum { NO, FEATHER, MULTI_BAND };
    enum { NO_EXPOSURE_COMPENSATOR =  0, FEATHER, MULTI_BAND };
它对我有用。
谢谢。

Ugh,当您尝试将objC导入到您所在领域的c文件时,Xcode会这样做。请检查您的导入是否正确,以及它们将要进入的文件是否包含正确的扩展名。我认为这是正确的。奇怪。
//    enum { NO, FEATHER, MULTI_BAND };
    enum { NO_EXPOSURE_COMPENSATOR =  0, FEATHER, MULTI_BAND };