如果标题不够具体的话,请原谅我。假设我想制作一个RPG。我为角色创建了一个类。然后我创建了一个数组,作为一个团队的角色。然后我有一个函数,减少团队中第一个成员的HP。
`
#include <iostream>
#include <string>
class Chara
{
public:
int HP;
Chara(int health)
{
HP = health;
}
};
int Battle(Chara Party[2])
{
Party[0].HP -= 2;
}
int main()
{
Chara Final(0);
Chara Fantasy(7);
Chara Player[2] = {Final, Fantasy};
Battle(Player);
std::cout << Final.HP;
}
`
“但是,角色的血量是不变的,有没有办法让角色的血量发生变化?”
1条答案
按热度按时间ie3xauqp1#
C++通过复制传递结构导致了两个不同的问题。
首先,
Chara Player[2] = {Final, Fantasy};
行创建了一个Chara
数组,并使用上述变量的 * 副本 * 初始化成员。这意味着最后一行不会看到对Player
元素所做的任何修改。相反,您应该执行以下操作:其次,通过copy将
Player
传递给Battle
函数。因此,在函数内部对Party
所做的任何更改都不会反映到外部的Player
变量中。快速修复方法是通过指针来获取Party
:这是因为数组在传递时可以衰减为指向其第一个元素的指针。
作为最佳实践,您可能应该使用
std::vector
,它允许您动态地添加和删除团队成员,并具有各种有用的方法。