2015年2月5日木曜日

SpineのSkeletonAnimationクラスを継承してリンカエラーを出してしまったら

cocos2d-xで、SpineのSkeletonAnimationクラスを継承してクラスを作った時に、デフォルトコンストラクタ回りでハマりました。

SkeletonAnimationクラスのヘッダファイルには、以下のようにデフォルトコンストラクタの宣言がされていますが、実装はされてないのです。それを知らずに、継承クラスでデフォルトコンストラクタを実装すると、SkeletonAnimation()が参照できないというリンカエラーがでるのです。
protected:
    SkeletonAnimation ();  <--こいつが実装されてないヽ(`Д´)ノ
    SkeletonAnimation (spSkeletonData* skeletonData);
    SkeletonAnimation (const std::string&skeletonDataFile, spAtlas* atlas, float scale = 1);
    SkeletonAnimation (const std::string& skeletonDataFile, const std::string& atlasFile, float scale = 1);


ただ、これだけなら継承クラスの実装直後のビルドで予測がつくので、そこまでハマりはしなかったと思います。というのも、iOS実機用にビルドすると、なぜかリンカエラーが出ずに、ビルドが成功してしまっていたのです。

リンカエラーが出ない原因はちょっと分からないのですが、それまではずっとiOS実機用ビルドでテストしていました。それから何日も経った後、iOSシミュレーター用にビルドしてみるとリンカエラーが出て問題が明らかになったわけです。その時には件のクラス継承については頭の中に無かったので、プロジェクトセッティングなどを疑ったりしてしまいました。

試しにAndroid用にビルドしてみると、やはりリンカエラーが出るので、そこでようやくSkeletonAnimation()が実装されていないことに気づくことができました。
それで継承クラスの方でもデフォルトコンストラクタを削除してやり、とりあえず問題を解決しました。

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...