我正在创建一个名为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;
}
答案 0 :(得分:0)
createPairing
应为static
:
static void createPairing(Team* t1, Team* t2);
除此之外,问题是当你执行Team createPairing(p1, p2);
时,你实际上并没有调用createPairing
函数,而是调用第二个构造函数 隐式。它正在创建名为Team
的{{1}}并将createPairing
转换为p1
。 (编译时应该有一个警告,假设你有警告。)
制作bool
函数createPairing
后,您可以这样称呼它:
static
答案 1 :(得分:0)
如果你想有两个配对参数,你应该使它成为一个自由函数(在课外)。否则我建议省略第一个参数(从对象的角度看它是“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)
void createPairing(Team& lhs, Team& rhs) // use references to avoid potential pointer issues
{
lhs.setPartner(&rhs);
rhs.setPartner(&lhs);
}
答案 2 :(得分: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;
}