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