web-dev-qa-db-ja.com

Xcode 7およびopenCV(Swiftなし):Core.hppヘッダーはC ++としてコンパイルする必要があります

IOSプロジェクトにOpenCVをインストールする方法について 手順 に従いました。ただし、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

ただし、それでも次のエラーが発生します。

enter image description hereenter image description here

Using名前空間cvのコメントを解除すると、私は次のようになります:

enter image description here

ヘッダーをSwiftなどに公開することについて話しているいくつかの複雑なソリューションを見つけました。プロジェクトをXcode7を使用してObjective-Cで動作させたいだけです...

14
mm24

OpenCVはC++フレームワークです。つまり、OpenCVを使用するコードは、C解釈ではなくC++解釈でコンパイルする必要があります。

表示されるエラー(例: using namespace cv;を使用すると、コードがObjective-C++コンパイラではなくObjective-Cコンパイラを使用してコンパイルされることを示します。

コメントで述べたように、これを実現する最も簡単な方法は、opencvヘッダーを#includesするファイルに名前を付ける必要があることを確認することです。 ViewController.mm、つまり、Objective-C++ファイルである必要があります。

または、ユーティリティペインでファイルタイプのObjective-C++ Sourceオプションを明示的に選択することにより、ファイルのTypeを選択して上書きすることもできます。 utilities pane drop-down selection

26
Petesh

私はまったく同じ問題を抱えていました。私はOpenCVでSwiftプロジェクトで働いています。

Swiftに関しては、OpenCVへのエントリポイントは私がOpenCVWrapperと呼んだファイルです。だから私はOpenCVWrapper.hとOpenCVWrapper.mmを手に入れました。プロジェクトのブリッジヘッダーで、#import "OpenCVWrapper.h"を取得しました。

OpenCVWrapper.mmから呼び出すことができるObjective-C++でMatUtilsというクラスを作成したかったのです。それらがそこに表示されるようにするには、MatUtils.hに配置する必要がありました。

簡単に言うと、間違いは、OpenCVWrapper.hで#import "MatUtils.h"を実行したことです。間違い!!!! OpenCVWrapperがブリッジヘッダーにあるため、SwiftからC++にアクセスできるようになりました。

クイックフィックス:OpenCVWrapper.mmの#import "MatUtils.h"!

乾杯! bRo

13
bRo

#import < opencv2/opencv.hpp >の前に#import "ViewController.h"を配置してみてください。 ソース

0
Lau Kwok Ping