C++ 设置函数赢得';因为某种原因我不能工作

C++ 设置函数赢得';因为某种原因我不能工作,c++,class,variable-assignment,member-variables,C++,Class,Variable Assignment,Member Variables,我正在开发一个简单的控制台应用程序来模拟一种计算两个大型中世纪士兵之间战斗的方法。我的想法是,我将设置计算,并使用不同的参数运行程序数次,以获得对它的感觉,如果它是我想要的。不管怎么说,我还是要解决这个问题 两个单元中的每一个都由一个单元类表示。这个类包含了“攻击”、“防御”、“战术”和“单位规模”的变量,以及一些其他变量,在我解决这个问题之前,我会对这些变量进行注释并忽略它们。下面是类标题的代码: #ifndef UNITS_H #define UNITS_H #include <str

我正在开发一个简单的控制台应用程序来模拟一种计算两个大型中世纪士兵之间战斗的方法。我的想法是,我将设置计算,并使用不同的参数运行程序数次,以获得对它的感觉,如果它是我想要的。不管怎么说,我还是要解决这个问题

两个单元中的每一个都由一个单元类表示。这个类包含了“攻击”、“防御”、“战术”和“单位规模”的变量,以及一些其他变量,在我解决这个问题之前,我会对这些变量进行注释并忽略它们。下面是类标题的代码:

#ifndef UNITS_H
#define UNITS_H
#include <string>
#include <iostream>

class Unit
{
  public:
      int attack;
      int defense;
      int charge;
      int brace;
      int tactics;
      int unit_size;

  public:
      bool isAlive;
      std::string name;
      Unit(std::string name_target)
      {
          name = name_target;
          attack = 1;
          defense = 1;
          charge = 1;
          brace = 1;
          tactics = 1;
          unit_size = 1;
          isAlive = true;
      }

      float GetAttack() {return (float)attack;}
      float GetDefense() {return (float)defense;}
      float GetCharge() {return (float)charge;}
      float GetBrace() {return (float)brace;}
      float GetTactics() {return (float)tactics;}
      float GetSize() {return (float)unit_size;}

      void SetAttack(int change) {attack = change;}
      void SetDefense(int change) {defense = change;}
      void SetCharge(int change) {charge = change;}
      void SetBrace(int change) {brace = change;}
      void SetTactics(int change) {tactics = change;}
      void SetSize (int change) {unit_size = change;}

      void TakeCasualties (int casualties);
      int Defend(Unit enemy, float base_chance, float base_multiplier);
      void DisplayStats();

    };

#endif // UNITS_H
#如果不使用单位#
#定义单位
#包括
#包括
班级单位
{
公众:
智力攻击;
智力防御;
整数电荷;
内支撑;
国际战术;
整数单位大小;
公众:
布尔·伊萨利夫;
std::字符串名;
单位(标准::字符串名称\u目标)
{
name=name\u目标;
攻击=1;
防御=1;
电荷=1;
支架=1;
战术=1;
单位面积=1;
isAlive=真;
}
float GetAttack(){return(float)attack;}
float GetDefense(){return(float)defense;}
float GetCharge(){return(float)charge;}
float GetBrace(){return(float)brace;}
float getActics(){return(float)tractics;}
float GetSize(){return(float)unit_size;}
void SetAttack(int change){attack=change;}
void SetDefense(int change){defense=change;}
void SetCharge(int change){charge=change;}
void SetBrace(int change){brace=change;}
void settractics(int change){tractics=change;}
void SetSize(int change){unit_size=change;}
伤亡人数(int伤亡人数);
智力防御(单位敌人,浮动基础概率,浮动基础乘数);
void displaysts();
};
#endif//UNITS\u H
对不起,如果它太草率,但我有点业余

我会为这个类包含.cpp代码,但是里面的一切都很好。我只使用默认值进行了测试运行,没有任何问题。我唯一的问题是在构造值之后更改它们

在main.cpp中,我有一个函数AssignStats(unitunit\u target),我在构建两个单元后调用它。我依次给每个人打电话。其代码如下:

void AssignStats (Unit unit_target)
{
    int x;
    cout << unit_target.name << endl;
    cout << "Value for attack?" << endl;
    cin >> x;
    cout << x << endl;
    unit_target.SetAttack(x);

    cout << "Value for defense?" << endl;
    cin >> x;
    unit_target.SetDefense(x);

    //unit_target.SetCharge(x);
    //unit_target.SetBrace(x);

    cout << "Value for tactics?" << endl;
    cin >> x;
    unit_target.SetTactics(x);

    cout << "Value for size?" << endl;
    cin >> x;
    unit_target.SetSize(x);
}
void AssignStats(单位目标)
{
int x;

cout我认为问题在于函数
AssignStats
按值接受参数

void AssignStats (Unit unit_target);
也就是说,该函数处理原始对象的副本。原始对象本身不会更改

按下面的方法更改它

void AssignStats (Unit &unit_target);

我相信你可以缩小范围。例如,你的类有六个属性,每个属性都有getter和setter,但是你不能用一个来重现这个问题吗?分而治之应该是调试的第一步,而不是最后一步(或者留给我们去做)。祝这个有趣且雄心勃勃的项目好运。一些人已经指出了为什么你的代码不起作用,但也许当你在那里时,你应该问问自己,为什么你的成员变量被存储为整数,设置为整数…但当你得到它们时,转换为浮点?转换的原因是我决定了ba的结果ttle首先计算一个单位的任何一名士兵杀死另一个单位的任何一名士兵的概率百分比。然后我为一个单位的每个士兵掷骰子一次,以确定另一个单位的士兵被杀的人数。确定该概率的等式涉及一些除法,因此我使用浮点数来确保除法保持精确。我把变量保留为整数,因为我想确保它们保持为整数。谢谢!我现在觉得不考虑这个问题很傻。
void AssignStats (Unit &unit_target);