2017-04-24 1 views
0

Je suis en train de porter un jeu écrit en C++ et OpenGL pour fonctionner sur iOS et OpenGL ES. La version originale utilise libpng et jpeglib pour charger les données d'image en tant que sprites, et je veux les remplacer par des fonctions CoreGraphics."Aucune fonction correspondante pour l'appel à ..." lors de l'utilisation de CGImage en source C++

En haut du fichier source C de qui contient les fonctions de chargement d'image, je l'ai ajouté ce qui suit:

#ifdef TOUCH_VERSION 
#include <Foundation/Foundation.h> 
#include <CoreGraphics/CoreGraphics.h> 
#else 
#include <png.h> 
#include <jpeglib.h> 
#endif 

Le puisqu'il est le drapeau du compilateur TOUCH_VERSION est défini (et travaille, ne se plaint pas de manquer png.h et jpeglib.h). Le problème que j'ai est qu'il ne reconnaît aucune fonction de CGImage. Par exemple:

CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename(path); 

entraîne l'erreur ImageBuffer.cpp:166:42: No matching function for call to 'CGDataProviderCreateWithFilename'. Initialement quand j'ai ajouté les CF et CG inclus, il a autobloqué les noms de type et de fonction CoreGraphics donc j'ai supposé que l'importation d'entête avait fonctionné, mais quand j'ai construit j'ai eu des erreurs que NSString et d'autres types Objective C n'étaient pas définis. J'ai ajouté -x objective-c aux indicateurs C et -x objective-c++ aux indicateurs C++ et il a résolu cette erreur, mais l'erreur ci-dessus est apparue.

Merci d'avance pour toute aide!

+0

et 'path' est de type' const char * '? –

+0

Merci @StephanLechner - vous avez absolument raison, et je viens de faire exactement la même découverte. J'oublie qu'en C++ vous pouvez avoir le même nom de fonction mais avec des types d'arguments différents, et qu'utiliser le mauvais type d'argument ne conduira pas nécessairement à une erreur qu'un type inattendu a été envoyé à la fonction. J'utilise Objective-C depuis trop longtemps;) – mashers

Répondre

1

Ahh, triés. J'ai réalisé que la fonction C++ utilisait std :: string car le CGDataProviderCreateWithFilename attend const char * comme nom de fichier. Quand je l'ai changé à CGDataProviderCreateWithFilename(path.c_str()) il a cessé de se plaindre de l'absence d'une fonction correspondante.