質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3561閲覧

Cannot initialize object parameter of type... というエラーについて

yaoriku_ava

総合スコア25

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/10/10 17:30

編集2018/10/11 09:24

Cocos2dxでアプリの開発をしており、キャラにアニメーションをつけようと思いこちらのサイトを参考にさせていただいたのですが(直リンで申し訳ありません)、

https://takachan.hatenablog.com/entry/2017/08/16/010311

派生元のcovos2d::Nodeやcocos2d::Spriteのメンバ変数・関数を参照しようとすると、「Cannot initialize object parameter of type 'cocos2d::Node'('cocos2d::Sprite') with an expression of type 'CharacterChip'」というエラーが出てしまい、開発が進みません。
原因としてはどんなものが考えられるのでしょうか…
ヘッダーと実装はこちらになります。

c++

1class CharacterChip : public cocos2d::Sprite{ 2private: 3 //現在向いている方向 4 Direction _currentDir = (Direction)-1; 5 //各方向のアニメーションを記憶しておく入れ物 6 cocos2d::Map<Direction, cocos2d::Action*> animationTable; 7 8public: 9 //リソースを解放してオブジェクトを破棄 10 virtual ~CharacterChip(); 11 virtual bool init(const std::string& name); 12 static CharacterChip* create(const std::string& name); 13 void changeDirection(Direction dir); 14};

c++

1CharacterChip::~CharacterChip(){ 2 this->removeFromParentAndCleanup(true); //ここにCannot initialize object parameter of type 'cocos2d::Node' with an expression of type 'CharacterChip'というエラー 3 this->animationTable.clear(); 4} 5 6bool CharacterChip::init(const std::string& name){ 7 if(!Sprite::init()) //ここにCannot initialize object parameter of type 'cocos2d::Sprite' with an expression of type 'CharacterChip'というエラー 8 return false; 9 10 auto baseSprite = Sprite::create(name); 11 auto textureSource = baseSprite->getTexture(); 12 textureSource->setAliasTexParameters(); 13 14 int frameWidth = baseSprite->getContentSize().width/4; 15 int frameHeight = baseSprite->getContentSize().height; 16 this->setContentSize(Size(frameWidth, frameHeight));//ここにCannot initialize object parameter of type 'cocos2d::Sprite' with an expression of type 'CharacterChip'というエラー 17 int harfWidth = baseSprite->getContentSize().width/2; 18 19 for(int y = 0; y < 2; y++){ 20 auto animation = Animation::create(); 21 animation->setDelayPerUnit(0.3f); 22 animation->setRestoreOriginalFrame(true); 23 for(int x = 0; x < 2; x++){ 24 int _x = frameWidth * x + (y >= 1 ? harfWidth : 0); 25 int _y = 0; 26 animation->addSpriteFrameWithTexture(textureSource, Rect(_x, _y, frameWidth, frameHeight)); 27 } 28 this->animationTable.insert((Direction)y, RepeatForever::create(Animate::create(animation))); 29 } 30 return true; 31} 32 33CharacterChip* CharacterChip::create(const std::string& name){ 34 CharacterChip* pRet = new (std::nothrow) CharacterChip(); 35 if(pRet && pRet->init(name)){ 36 pRet->autorelease(); //ここにCannot initialize object parameter of type 'cocos2d::Ref' with an expression of type 'CharacterChip'というエラー 37 return pRet; 38 }else{ 39 delete pRet; 40 pRet = nullptr; 41 return nullptr; 42 } 43} 44 45void CharacterChip::changeDirection(Direction dir){ 46 if(this->_currentDir == dir) 47 return; 48 if(this->animationTable.find(dir) == this->animationTable.end()) 49 return; 50 this->runAction(this->animationTable.at(dir)); 51}

エラーが全て似たような感じなので、原因がわかれば一気に解決できそうなのですが...
実体がないというのも、create関数中にエラーが出ていることが関係しているのではと思います。
CharacterChipクラスは、Spriteクラス、Nodeクラス、Refクラスを全て継承しているはずなのに、なぜその派生元のクラスのメンバ変数やメンバ関数をいじれないんでしょう泣

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

UnrealEngineの質問サイトに同じような投稿があり、
Xcodeのビルド設定をc++11からc++14にしたところ解決しました。
ただcocos2dxはc++11までをカバーしていた気がするので(ラムダ式とか)
これでいいのかどうか。。
まあビルドも成功してアニメーションも実装できたのでよしとしましょう!

投稿2018/10/12 06:53

yaoriku_ava

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずそのエラーが出るというコードを提示しましょう。

エスパーすると、
クラスのインスタンス作らずにアクセスしようとしてる、とか

投稿2018/10/11 00:07

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yaoriku_ava

2018/10/11 09:26

y_waiwaiさん、ご回答ありがとうございます! Refクラスのメンバを初期化できないとのエラーが出ているため、 クラスのポインタをautoreleaseできず、実体が作れていないのも関係していると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問