2016-05-12 1 views
1

私はSDLミニゲームを作ろうとしています。別のクラスのベクトルポインタを呼び出そうとすると問題が発生します。問題は、私が関数を呼び出すと結果が空ベクトルになるということです。私はすべてのフレーム他のクラスから(ベクトル)ポインタを呼び出す空のサイズを返す

class badBoss { 
public: 

    struct fire { 
     int type, x, y; 
     float v, vx, vy; 
     int angle; 
    }; 
    std::vector<fire> vFire; 
    std::vector<fire> *pvFire = &vFire; 


    void drawBoss(SDL_Renderer *ren) { 
     vFire.push_back(fire({0,cP1.x+20,cP1.y,cP1.w,cP1.h,v})); 
    } 

} drawBossに呼び出し、このクラスの

。私はvFireポインタを捕獲しようとするが、サイズが常に0

class colision { 


public: 
    badBoss _boss; 

    void detectColision() { 

     std::vector<badBoss::fire> lala = *_boss.pvFire; 
     std::cout << lala.size() << std::endl; 

    } 

}である。このクラスで

これはどのように私は正確にポインタの値を取得することができます

int main() { 
    colision _colision; 
    bool aktibo = true; 

    while(aktibo) { 

     _badBoss.drawBoss(ren); 
     _colision.detectColision();  

    } 

    return 0; 
} 

私のゲームの主なのですか?

編集:あなたの提案のおかげで、私はそれを修正することができました。これは問題でした: colisionクラスでは、私はbadBossで新しいインスタンスを実行していました。もちろん、vFireベクトルの呼び出しは常に0でした。

今すぐ私は正しいインスタンスパラメタのようなものです...。wallaaa !!すべて完璧に走る!私の愚見で

+1

パブリックメンバー変数としてベクトルとそのポインタを持っていますか? 'detectCollision()'のベクトルに直接アクセスしてベクトルにアクセスしようとしましたか? – user463035818

+1

考えられるシナリオは、 '_boss.pvFire'でアクセスしている' badBoss'インスタンスが 'drawBoss'を呼び出すインスタンスと同じではないということです。 – molbdnilo

+0

こんにちは@ tobi303、私はC++で新しいです。私は他のクラスからアクセスしたいので、公共のような2つの変数があります。また、私は衝突クラスから直接アクセスしようとしますが、同じ変数ではありません。その常に空の –

答えて

1

@molbdniloは良い点があります。 _bossオブジェクトを初期化するコリジョンクラスにコンストラクタ(またはセッタ)を追加する必要があります。すなわち

colision(badBoss boss) { 
_boss = boss; 
} 
+0

こんにちは@asif !! BINGO !!それは問題だった!コリジョンクラスでは、私はbadBossの代わりに新しい初期化を行いました。もちろん、vFireは常に0でした。 ありがとうございました! ;-) –

0

、それはベクトルポインタの初期化の問題である:

class badBoss { 
public: 

    struct fire { 
     int type, x, y; 
     float v, vx, vy; 
     int angle; 
    }; 
    std::vector<fire> *vFire = new std::vector<fire>(); 
    // I don't think it's even needed 
    //std::vector<fire> *pvFire = &vFire; 


    void drawBoss(SDL_Renderer *ren) { 
     // Isn't one value missing? 
     vFire->push_back(fire({0,cP1.x+20,cP1.y,cP1.w,cP1.h,v})); 
    } 
}; 

そして今、データ衝突のために

class collision { 

public: 
    void detectCollision() { 
     std::cout << _boss.vFire->size() << std::endl; 

    } 
}; 

は、この情報がお役に立てば幸い! 参考: Pointer to a Vector

+0

@ Alfonsoのおかげでありがとう。あなたのコードは完璧に動作しますが、私は同じ問題を抱えています。もし私がstd :: coutを作るなら< size()<< std :: endl; drawBoss関数ではすべてが良いですが、私がstd :: cout << _bossを作成するとします。vFire-> size()<< std :: endl; detectCollisionでは、ベクトルのサイズは空です。 (もし私がgithubで完全なコードを持っていれば) –

+0

確かに、コード全体をチェックするためのリンクはありますか? –

+0

アルフォンソは、趣味だけを取り入れやすい。私の仕事ではありません;-) https://github.com/perikobermio/xfighter.git –

関連する問題