0

私の人生では、参照によって b2Body (Box2d オブジェクト) をメソッドに渡し、それに値を割り当てる方法がわかりません。

void GameContactListener::GetContactInfo(b2Body &hero, b2Body &ground, b2Body &enemy) {
    b2Body *b1 = thing1->GetBody();
    b2Body *b2 = thing2->GetBody();

    // EXC_BAD_ACCESS HERE
    hero = *b1;
    ground = *b2;
}

// elsewhere
b2Body *hero = NULL;
b2Body *ground = NULL;

GetContactInfo(*hero, *ground);

単純なint型では参照渡しが機能しますが、ポインターで何かが欠けているようです。

メソッドの宣言を追加して編集します。

void GetContactInfo(b2Body& hero,  b2Body& ground, b2Body& enemy);
4

4 に答える 4

1

thing->GetBody()を返すと仮定するとb2Body*

void GameContactListener::GetContactInfo(b2Body*& hero, b2Body*& ground) {
    hero = thing->GetBody();
    ground = thing->GetBody();
}

// elsewhere
b2Body* hero = NULL;
b2Body* ground = NULL;

GetContactInfo(hero, ground);

heroとの両方groundが同じb2Bodyオブジェクトを指すことに注意してください。

于 2013-01-22T16:39:40.223 に答える
0

呼び出しでは、以下のようにポインターのアドレスを渡す必要があります。

 GetContactInfo(hero, ground);

このチュートリアルのセクション 4 を読むことをお勧めします。

于 2013-01-22T16:39:58.453 に答える
0

他の人が指摘したように、ポインターへの参照を使用してポインターを変更します。

void
GameContactListener::GetContactInfo(b2Body *& hero, b2Body *& ground)
{
    b2Body *b1 = thing->GetBody();
    b2Body *b2 = thing->GetBody();

    // Assign pointer to ref to pointer here.
    hero = b1;
    ground = b2;
}

// elsewhere
b2Body *hero = NULL;
b2Body *ground = NULL;

GetContactInfo(hero, ground); // Pass pointers

別の昔ながらの方法は、ポインターへのポインターです。

void
GameContactListener::GetContactInfo(b2Body **hero, b2Body **ground) {
    b2Body *b1 = thing->GetBody();
    b2Body *b2 = thing->GetBody();

    // Assign pointers to pointers.
    *hero = b1;
    *ground = b2;
}

// elsewhere
b2Body *hero = NULL;
b2Body *ground = NULL;

GetContactInfo(&hero, &ground); // Pass address of pointers.

クリーンでモダンな最初の方法の方が好きです。

于 2013-01-22T16:49:14.967 に答える
0

(b2Body*&)ポインターへの参照を渡すために使用します。

于 2013-01-22T16:39:47.003 に答える