Xcode 7 и openCV (нет Swift): заголовок Core.hpp должен быть скомпилирован как С++

Я следил за инструкциями о том, как установить OpenCV в проекте iOS. Однако при использовании Xcode 7 мне пришлось вручную добавить заголовок префикса. Выполнение этого, к сожалению, не помогло, и я все еще получал ошибки компиляции. Затем я прочитал другое сообщение, в котором говорится, что лучше всего добавлять вручную импорт, а не использовать заголовки префикса в Xcode 7, поэтому я сделал.

Вот мой код:

#import "ViewController.h"

#import <opencv2/opencv.hpp>
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <opencv2/highgui/cap_ios.h>
//using namespace cv;

@interface ViewController ()
{
    IBOutlet UIImageView* imageView;
    IBOutlet UIButton* button;
}

- (IBAction)actionStart:(id)sender;

@end

Однако я все еще получаю следующие ошибки.

введите описание изображения здесь введите описание изображения здесь

Когда я раскомментирую использование пространства имен cv; Я получаю следующее:

введите описание изображения здесь

Я нашел несколько сложных решений, говорящих об экспонировании заголовков в Swift и т.д. Я просто хочу, чтобы мой проект работал на Objective-C с Xcode 7...

Ответ 1

OpenCV представляет собой структуру C++, что означает, что любой код, который использует OpenCV, должен быть скомпилирован с интерпретацией C++, а не интерпретацией C.

Ошибки, которые вы видите, например. с using namespace cv; указывают, что код скомпилирован с использованием компилятора objective-C, а не компилятора objective-C ++.

Как я уже упоминал в своем комментарии, самый простой способ добиться этого - убедиться, что любой файл, который #include заголовок opencv должен быть назван, например. ViewController.mm, т.е. должен быть файл objective-C ++.

В качестве альтернативы вы можете выбрать и переопределить Type файла, явно выбрав параметр Objective-C++ Source для типа файла в панели утилит.  раскрывающийся список панели утилит

Ответ 2

У меня была точно такая же проблема. Я работаю над проектом Swift с OpenCV.

Что касается Swift, его точкой входа в OpenCV является файл, который я называл OpenCVWrapper. Поэтому я получил OpenCVWrapper.h и OpenCVWrapper.mm. В заголовочном заголовке моего проекта я получил #import "OpenCVWrapper.h".

Я хочу написать класс под названием MatUtils в Objective-C ++, который я мог бы вызвать из OpenCVWrapper.mm. Чтобы их можно было увидеть там, мне пришлось поместить их в MatUtils.h.

Короче говоря, ошибка в том, что в OpenCVWrapper.h я сделал #import "MatUtils.h". ОШИБКИ!!!! Поскольку OpenCVWrapper находится в заголовочном заголовке, С++ теперь доступен из Swift!

Быстрое исправление: #import "MatUtils.h" в OpenCVWrapper.mm!

Ура! BRO

Ответ 3

Попробуйте поместить #import < opencv2/opencv.hpp > перед #import "ViewController.h". Источник