【发布时间】:2025-11-28 10:20:06
【问题描述】:
我这里有点问题。我正在尝试定义几个类,其中一些是玩家,一些是属于玩家的 Pawn。来自 Python,我习惯于通过 Pawn 方便地访问 Pawn 拥有的 Player,以及通过 Player 访问 Player 的 Pawns。如果我错了,请纠正我,但这在 C++ 中似乎是不可能的。
我目前首先定义 Player,它的一个数据成员 m_Pawns 应该是 vector<Pawn>。我声明了数据成员,但我没有为它分配任何值。我还定义了一个成员函数,用于将棋子向量分配给m_Pawns,但我不会在构造函数附近的任何地方调用它。因为我实际上并没有在Player 的构造函数中调用Pawn 的构造函数,所以看来我应该没问题。
这是我的Player 课程。 Board 类是预先定义的,而 Pawn 类是在之后定义的(Pawn 类包含指向 Player 类所有者的指针,因此切换它并没有真正的帮助)。
class Player
{
public:
Player(sf::Color color, const string& name);
sf::Color GetColor();
string GetName();
void CreatePawns(Board& board, int which);
protected:
vector<Pawn> m_Pawns;
sf::Color m_Color;
string m_Name;
};
Player::Player(sf::Color color, const string& name):
m_Color(color),
m_Name(name)
{}
sf::Color Player::GetColor()
{
return m_Color;
}
string Player::GetName()
{
return m_Name;
}
void Player::CreatePawns(Board& board, int which)
{
switch(which)
{
case 1:
for(int i = 0; i < 4; ++i)
{
m_Pawns.push_back(Pawn((*board).Cluster1[i], this*, m_Color));
}
break;
case 2:
for(int i = 0; i < 4; ++i)
{
m_Pawns.push_back(Pawn((*board).Cluster2[i], this*, m_Color));
}
break;
case 3:
for(int i = 0; i < 4; ++i)
{
m_Pawns.push_back(Pawn((*board).Cluster3[i], this*, m_Color));
}
break;
default:
cout << "Invalid player ID!\n\n";
break;
}
}
【问题讨论】:
-
使用前向声明...查看此链接www-subatech.in2p3.fr/~photons/subatech/soft/carnac/…
标签: c++ class pointers reference definition