C++ 设置指向对象的指针,使对象相互指向

C++ 设置指向对象的指针,使对象相互指向,c++,C++,我正在创建一个名为Team的类。如何使两个对象作为伙伴相互指向?这是我到目前为止一直在做的事情。我只使用布尔数据字段对其进行了测试,我知道到目前为止我的程序的其余部分都能正常工作 #include <iostream> using namespace std; class Team { public: Team(); Team(bool prac, Team *part); Team *partner; bool practiced;

我正在创建一个名为Team的类。如何使两个对象作为伙伴相互指向?这是我到目前为止一直在做的事情。我只使用布尔数据字段对其进行了测试,我知道到目前为止我的程序的其余部分都能正常工作

#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;
}
#包括
使用名称空间std;
班队
{
公众:
团队();
团队(bool prac,团队*部分);
团队*合作伙伴;
布尔练习;
无效创建配对(团队*t1,团队*t2);
};
团队::团队()
{
实践=错误;
合作伙伴=0;
}
团队:团队(布尔普拉克,团队*部分)
{
实践=实践;
合作伙伴=零件;
}
无效团队::创建配对(团队*t1,团队*t2)
{
t1->伙伴=t2;
t2->partner=t1;
}
int main()
{
哈里队;
罗恩队;
团队*p1=&Harry;
团队*p2=&Ron;
团队合作(p1、p2);

cout
createPairing
应该是
static

static void createPairing(Team* t1, Team* t2);
除此之外,问题在于当您执行
teamcreatepairing(p1,p2)时;
,您实际上并没有调用
createPairing
函数,而是隐式调用第二个构造函数。它创建了一个名为
createPairing
团队,并将
p1
转换为
bool
。(在编译时,假设在
上有警告,则应该有一个警告)

在执行
createPairing
函数
static
后,您可以这样称呼它:

Team::createPairing(&Harry, &Ron);

如果你想有两个参数进行配对,你应该让它成为一个自由函数(在类之外)。否则我建议省略第一个参数(从对象的角度来看是“this”)。这两个参数都将有助于防止magtheridon96已经提供了修复的错误

void Team::createPairing (Team *other)
{
    partner = other;
    other->partner = this; // here, making the member private and providing a setter would be better
}
或者,作为自由函数(使用setter)

#包括
使用名称空间std;
班队
{ 
公众:
团队();
团队(bool prac,团队*部分);
团队*合作伙伴;
布尔练习;
静态配对(团队*t1,团队*t2);
};
团队::团队()
{
实践=错误;
合作伙伴=0;
}
团队:团队(布尔普拉克,团队*部分)
{
实践=实践;
合作伙伴=零件;
}
无效团队::创建配对(团队*t1,团队*t2)
{
t1->伙伴=t2;
t2->partner=t1;
}
int main()
{
哈里队;
罗恩队;
团队*p1=&Harry;
团队*p2=&Ron;
团队::创建配对(p1、p2);
返回0;
}

谢谢您的建议。不过,下面仍然为合作伙伴返回0。当我试图在函数声明中放置static void时,我的编译器给了我一个错误,告诉我static只能在类定义中指定。也就是说,我定义了static void(createPartner)在类定义中,但在定义函数时,我不能这样做。@AnnVeal Yes,您只需在类内的声明中这样做。仅在类内使用
static
。在编写函数的实现时,不应使用
static
。谢谢,我这样做了。但是,对于合作伙伴,它仍然返回0在我使用函数并打印cout后,您能粘贴更新的代码吗?(因此我们在同一页上)谢谢,这非常有帮助。
void createPairing(Team& lhs, Team& rhs) // use references to avoid potential pointer issues
{
    lhs.setPartner(&rhs);
    rhs.setPartner(&lhs);
}
#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;
}