2013-02-21 9 views
5

Używam frameworka OpenCV do przetwarzania obrazu, określam krawędź na zdjęciu dla normalnego projektu iOS , teraz konwertuję ten kod w projekcie cocos2d, zaimportowałem wszystkie Wymagane nagłówki, ale podczas kompilacji otrzymuję ten błąd: oczekiwana lista-kwalifikatora przed "cv". tutaj jest mój kodbłąd: oczekiwana lista-kwalifikatora przed "cv"

 #import "cocos2d.h" 
    #import "CameraController.h" 
    #import "Globals.h" 

    @interface BotoxEffectController : CCLayer 
    { cv::VideoCapture *_videoCapture; cv::Mat _lastFrame;}//this is line where i am 
     getting error 

    @property (nonatomic, retain) CCSprite *sprite2D; 
    +(CCScene *) scene; 
    @end 

    here is code in .pch file. 

    #import <Availability.h> 

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

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

    #ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #endif 

Proszę odnieść się poniżej ekranu strzał BotoxEffectController interfejs klasy gdzie błąd jest & plik ma rozszerzenie .mm realizacja. BotoxEffectController

tutaj jest .pch plik gdzie jestem importowania opencv.hpp

.pch

+0

Upewnij się, że plik importujący to ma rozszerzenie .mm, nie .m – borrrden

+0

tak plik ma rozszerzenie .mm –

+0

Jeden z nich nie jest – borrrden

Odpowiedz

0

Chyba wiem, co się tu dzieje. Spróbuj dodać nagłówek OpenCV do pliku nagłówka BotoxEffectController:

#import <OpenCV/opencv2/opencv.hpp> 

Jeśli to rozwiązuje błędy kompilacji, problem jest z prefix.pch. Z jakiegoś powodu nie analizuje części #if __cplusplus. Można go zweryfikować poprzez dodanie do niego ostrzeżenie, zobacz czy wyzwala:

#ifdef __cplusplus 
#warning "ok so it DID import the OpenCV header" 
#import <OpenCV/opencv2/opencv.hpp> 
#endif 

Jeśli to jest problem, nie mogę powiedzieć, dlaczego nagłówek OpenCV w prefix.pch nie będzie działać. Pamiętam tylko, że raz lub dwa razy miałem ten problem, ale nie pamiętam, jak to naprawiłem. Jedna rzecz, którą powinieneś sprawdzić: BotoxEffectController.h powinien mieć ustawiony Typ pliku na "Default - C Header", a nie nagłówek C++.

+1

Nagłówki OpenCV muszą być zawarte przed UIKit.h i Foundation.h, ponieważ OpenCV definiuje makro MIN, które jest w konflikcie z funkcją MIN zdefiniowaną przez frameworki Apple. Jeśli umieścisz nagłówki OpenCV po UIKit.h i Foundation.h, otrzymasz błędy kompilacji, takie jak "Błąd LLVM GCC 4.2: Wyrażenia-wyrażenia są dozwolone tylko wewnątrz funkcji". Włączenie nagłówków OpenCV i otaczanie #import testem warunkowym __cplusplus pozwala uniknąć tego problemu i oznacza, że ​​nadal możesz używać zwykłego Objective-C dla plików ".m" w twoim projekcie, które nie nazywają się API OpenCV. –

+1

odsyłają: http://aptogo.co.uk/2011/09/opencv-framework-for-ios/ –

Powiązane problemy