2

Team というクラスを作成しています。2 つのオブジェクトをパートナーとして相互に指すようにするにはどうすればよいですか? これが私がこれまで取り組んできたことです。ブール データ フィールドだけでテストしましたが、プログラムの残りの部分はこれまでのところ動作することがわかっています。

#include <iostream>
using namespace std;

 class Team
{
    public:

    Team();
    Team(bool prac, Team *part);
    Team *partner;
    bool practiced;
    void createPairing (Team *t1, Team *t2);
};


Team::Team()
{
    practiced = false;
    partner = 0;
}

Team::Team(bool prac, Team *part)
{
    practiced = prac;
    partner = part;
}

void Team::createPairing (Team *t1, Team *t2)
{
    t1->partner = t2;
    t2->partner = t1;
}

int main()
{
    Team Harry;
    Team Ron;
    Team *p1 = &Harry;
    Team *p2 = &Ron;
    Team createPairing(p1, p2);

    cout << Harry.partner << endl;
    return 0;
}
4

3 に答える 3

0

createPairingする必要がありますstatic:

static void createPairing(Team* t1, Team* t2);

それ以外の問題は、Team createPairing(p1, p2);実際にcreatePairing関数を呼び出しているのではなく、 2 番目のコンストラクターを 暗黙的に呼び出していることです。Teamと呼ばれるを作成し、createPairingに変換p1していboolます。( に警告があると仮定してコンパイルすると、これに対する警告が表示されるはずです。)

createPairing関数を作成したら、次のstaticように呼び出します。

Team::createPairing(&Harry, &Ron);
于 2013-03-27T15:44:17.960 に答える
0

ペアリング用に 2 つのパラメーターが必要な場合は、それを (クラスの外で) フリー関数にする必要があります。それ以外の場合は、最初のパラメーターを省略することをお勧めします (オブジェクトの観点からは "this" です)。どちらも、magtheridon96 が既に修正を提供しているエラーを防ぐのに役立ちます。

void Team::createPairing (Team *other)
{
    partner = other;
    other->partner = this; // here, making the member private and providing a setter would be better
}

または、フリー関数として (セッター付き)

void createPairing(Team& lhs, Team& rhs) // use references to avoid potential pointer issues
{
    lhs.setPartner(&rhs);
    rhs.setPartner(&lhs);
}
于 2013-03-27T16:05:40.263 に答える
0
#include <iostream>
using namespace std;

class Team
{ 
    public:

    Team();
    Team(bool prac, Team *part);
    Team *partner;
    bool practiced;
    static void createPairing (Team *t1, Team *t2);
};


Team::Team()
{
    practiced = false;
    partner = 0;
}

Team::Team(bool prac, Team *part)
{
    practiced = prac;
    partner = part;
}

void Team::createPairing (Team *t1, Team *t2)
{
    t1->partner = t2;
    t2->partner = t1;
}

int main()
 {
    Team Harry;
    Team Ron;
    Team *p1 = &Harry;
    Team *p2 = &Ron;
    Team::createPairing(p1, p2);


    return 0;
}
于 2013-03-27T18:58:49.950 に答える