web-dev-qa-db-fra.com

Xcode 7 et openCV (no Swift): l'en-tête Core.hpp doit être compilé en C++

J'ai suivi les instructions pour installer OpenCV sur un projet iOS. Cependant, lors de l'utilisation de Xcode 7, j'ai dû ajouter manuellement un en-tête de préfixe. Faire cela n'a malheureusement pas aidé et j'avais encore des erreurs de compilation. J'ai ensuite lu un autre article suggérant qu'il est préférable d'ajouter manuellement les importations et de ne pas utiliser les en-têtes de préfixe dans Xcode 7, c'est ce que j'ai fait.

Voici mon code:

#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

Cependant, j'obtiens toujours les erreurs suivantes. 

enter image description here enter image description here

Quand je décomande le namespace using cv; Je reçois ce qui suit:

enter image description here

J'ai trouvé des solutions complexes en ce qui concerne l'exposition des en-têtes à Swift, etc. Je souhaite simplement que mon projet fonctionne sur Objective-C avec Xcode 7 ... 

13
mm24

OpenCV est un framework C++, ce qui signifie que tout code utilisant OpenCV doit être compilé avec l'interprétation C++, plutôt que l'interprétation C.

Les erreurs que vous voyez, par exemple avec le using namespace cv; indique que le code est compilé à l'aide du compilateur Object-C plutôt que du compilateur Object-C++.

Comme je l’ai mentionné dans mon commentaire, le moyen le plus simple d’y parvenir est de s’assurer que tout fichier dont le nom #include est un en-tête opencv doit être nommé, par exemple. ViewController.mm, c’est-à-dire qu’il doit s’agir d’un fichier Objective-C++.

Vous pouvez également sélectionner et remplacer la Type du fichier en sélectionnant explicitement l'option Objective-C++ Source pour le type de fichier dans le volet Utilitaires.  utilities pane drop-down selection

24
Petesh

Je viens d'avoir exactement le même problème. Je travaille dans un projet Swift avec OpenCV. 

En ce qui concerne Swift, son point d’entrée sur OpenCV est un fichier que j’ai appelé OpenCVWrapper. J'ai donc OpenCVWrapper.h et OpenCVWrapper.mm. Dans l'en-tête de pontage de mon projet, j'ai eu # import "OpenCVWrapper.h".

La chose est que je voulais écrire une classe appelée MatUtils en Objective-C++ que je pourrais appeler à partir de OpenCVWrapper.mm. Pour qu'ils soient visibles là-bas, je devais les mettre dans MatUtils.h.

En bref, l’erreur est que dans OpenCVWrapper.h, j’ai importé #import "MatUtils.h". ERREUR!!!! Comme OpenCVWrapper est dans l’en-tête de pontage, C++ est maintenant accessible depuis Swift! 

Solution rapide: #import "MatUtils.h" dans OpenCVWrapper.mm!

À la vôtre! BRo

9
bRo

Essayez de placer #import < opencv2/opencv.hpp > avant #import "ViewController.h". Source

0
Lau Kwok Ping