gpt4 book ai didi

c++ - 由于某种原因,设置功能将不起作用

转载 作者:太空狗 更新时间:2023-10-29 21:20:29 27 4
gpt4 key购买 nike

我正在开发一个简单的控制台应用程序,以对计算两个大型中世纪士兵单位之间的战斗的方法进行原型(prototype)设计。我的想法是我将设置计算,并使用不同的参数多次运行程序以感受它是否是我想要的。无论如何,关于这个问题。

两个单元中的每一个都由一个单元类表示。该类包括“攻击”、“防御”、“战术”和“单位大小”的变量以及我在解决此问题之前注释掉和忽略的其他一些变量。这是类 header 的代码:

#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

对不起,如果它草率,但我有点业余。

我会包含该类的 .cpp 代码,但其中的所有内容都可以正常工作。我已经用默认值完成了测试运行,没有问题。我遇到的唯一问题是在构建值后更改值。

在 main.cpp 中,我有一个函数 AssignStats(Unit unit_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);
}

据我所知,这段代码应该可以工作。但是,当我之后显示每个单元的统计信息时,它会显示构造函数输入的默认值。对于我的生活,我无法弄清楚为什么我的 Set 函数不起作用。我稍早重写了代码以检查他们是否输入正确,如下所示:

void Unit::SetAttack()
{
int x;
std::cout << "Input target value for attack." << std::endl;
std::cin >> x;
std::cout << x;
attack = x;
std::cout << attack;
}

我会输入 10,每个 cout 会立即向我显示 10,即使是那个应该显示类的攻击变量的 cout,但稍后当我调用 DisplayStats() 时,它会显示所有内容再次默认值。

比我更有经验的人可以解决这个问题吗?

最佳答案

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

void AssignStats (Unit unit_target);

该函数处理原始对象的拷贝。原始对象本身没有改变。

按照下面的方式修改

void AssignStats (Unit &unit_target);

关于c++ - 由于某种原因,设置功能将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com