2017-04-24 6 views
0

C++とOpenGLで書かれたゲームをiOSとOpenGL ES上で移植しています。元のバージョンでは、画像データをスプライトとして読み込むためにlibpngとjpeglibを使用しています。これらをCoreGraphics関数に置き換えたいと思います。画像の読み込み機能が含まれているC++ソースファイルの先頭に C++ソースでCGImageを使用しているときに「呼び出す機能がありません...」

は、私が追加した以下:

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

TOUCH_VERSIONコンパイラフラグが定義されている(そしてそれが行方不明に文句いないことから、働いていますpng.hおよびjpeglib.h)。私が抱えている問題は、CGImage関数を認識していないということです。たとえば、

CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename(path); 

の結果はエラーImageBuffer.cpp:166:42: No matching function for call to 'CGDataProviderCreateWithFilename'となります。最初にCFとCGインクルードを追加したとき、CoreGraphicsのタイプと関数名がオートコンプリートされたので、ヘッダーのインポートはうまくいっていると推測しましたが、NSStringやその他のObjective Cタイプが定義されていないというエラーがありました。私は-x objective-cをCフラグに追加し、-x objective-c++をC++フラグに追加してこのエラーを解決しましたが、上記のエラーが表示されました。

ありがとうございました!

+0

'path'は' const char * '型ですか? –

+0

ありがとう@StephanLechner - あなたは絶対に正しいです。私はまったく同じ発見をしました。私はC++で同じ関数名を持つことができますが、引数の型が異なることを忘れていました。間違った引数の型を使用しても、予期しない型が関数に送られたというエラーは必ずしも発生しません。私はObjective-Cを長すぎる使っています;) – mashers

答えて

1

Ahh、ソート済みです。 CGDataProviderCreateWithFilenameがファイル名としてconst char *を予期しているので、C++関数がstd :: stringを使用していることに気付きました。私がこれをCGDataProviderCreateWithFilename(path.c_str())に変更したとき、それは一致する機能の不足について不平を言った。

関連する問題