エラー内容
1 |
enum { NO, GAIN, GAIN_BLOCKS }; |
ヘッダーファイル(*.hpp)において "Expected Identifier" が発生する。
直前のソースコードで以下の警告(Warning)が発生している。
1 2 3 |
#if defined(NO) # warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers. #endif |
意訳
Apple (Xcode) が提供するヘッダーファイルにおいて "NO" が定義される前に、OpenCVのヘッダーファイルを先に読み込んで "NO;" を定義しなければならない。
【ケース1】 Pre-Compile Header (YourProject-Prefix.pch) が存在する
Pre-Compile Headerは、ソースコードに記述したinclude文より先に読み込まれるため、ここでOpenCVのヘッダーファイルを先駆けて読み込む必要がある。
YourProject-prefix.pchの中でAppleのIncludeファイルを読み込む前にOpenCVのヘッダーをインクルードする。
1 2 3 |
#ifdef __cplusplus #include <opencv2/opencv.hpp> #endif |
記述(挿入)例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// // Prefix header for all source files of the 'YourAppName' target in the 'YourProjectName' project // #import <Availability.h> #ifndef __IPHONE_4_0 #warning "This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __cplusplus #include <opencv2/opencv.hpp> #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #endif #import "Defs.h" |
補足
Xcode5までは、プロジェクト新規作成時に *-Prefix.pch が自動生成、自動登録されていたが、Xcode6以降では明示的に作成しない限り *-Prefix.pch は存在しない。ケース1に該当するのは、(おそらく)Xcode5以前に作成されたXcodeプロジェクトでだけある。
【ケース2】 Pre-Compile Header (YourProject-Prefix.pch) が存在しない
ソースコード(*.m, *.h, *.cpp, *.hppなど)1つ1つで opencv.hpp のインクルード文を前に移動させる
修正前の例
1 2 |
#import <Foundation/Foundation.h> #import <opencv2/opencv.hpp> |
修正後の例
1 2 |
#import <opencv2/opencv.hpp> #import <Foundation/Foundation.h> |