4

iPhone用のOpenCVのバージョンを使用していますが、やや奇妙なエラーが発生しました。スティッチャーを使用する際に、インポートされたヘッダーの一部が、この行の一致しない「{」について不平を言っています。

enum { NO, FEATHER, MULTI_BAND };

NOとして定義されているobjc.hからのマクロです

#define NO              __objc_no

また、コンパイラは、少し後に列挙型が存在する場合でも、列挙型の先頭に一致する「}」を期待しています。何が起こっている?

4

4 に答える 4

11

私は長い間同じ問題を抱えていましたが、今、回避策を発見しました。あなたが正しく述べたように、それは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

このようにして、blenders.hppとexposure_compensate.hppのNO列挙型は、UIKitのNO-makroの前に定義されます。

于 2013-02-14T08:34:30.467 に答える
6

Swift:.mmファイルでは、OpenCVヘッダーを呼び出す前に、UIKitから「NO」マクロの定義を解除する必要があります。

#import "OpenCVWrapper.h"
#undef NO
#import <opencv2/opencv.hpp>
于 2017-06-11T02:44:00.857 に答える
1

Swiftユーザーにはもっと簡単な修正を使用しました。

私の.mmファイルでは、.hインポートを。の下 に移動し#import<opencv2/opencv.hpp>ました。

お役に立てれば!

于 2017-02-07T21:54:10.343 に答える
1

コードを変更します-

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

わたしにはできる。ありがとう。

于 2017-10-27T06:34:27.030 に答える