C++ 当计算成员的值时,向量有一个奇怪的问题

C++ 当计算成员的值时,向量有一个奇怪的问题,c++,algorithm,class,vector,C++,Algorithm,Class,Vector,这是我最后一个问题的最新跟进: 我已经完成了排序算法,看起来效果不错。现在,我的问题是试图根据向量中的级别计算每个战斗机的健康度(在getHealth()函数中),以便正确计算 战斗机.h #ifndef FIGHTER_H #define FIGHTER_H #include <iostream> #include <ctime> #include <string> #include <cstdlib> #include <fstream

这是我最后一个问题的最新跟进: 我已经完成了排序算法,看起来效果不错。现在,我的问题是试图根据向量中的级别计算每个战斗机的健康度(在getHealth()函数中),以便正确计算

战斗机.h

#ifndef FIGHTER_H
#define FIGHTER_H

#include <iostream>
#include <ctime>
#include <string>
#include <cstdlib>
#include <fstream>
#include <vector>

class Fighter
{   
protected:
        std::vector<Fighter> x;
        std::string name;
        int health, level;
        //int damage;
public: 
        int  getHealth(int);
        void getEnemies(/*std::vector<Fighter> &*/);
        void printFighter(/*std::vector<Fighter> &*/);
        void sortFighters(/*std::vector<Fighter> &*/);
        //friend std::istream & operator >> (std::istream & strm, Fighter & x);
        //friend std::ostream & operator << (std::ostream & strm, const Fighter & f);
        //void attack();
        Fighter();
        ~Fighter();
};

class Player : public Fighter 
{ 
    private:
        int experience;
    public:
        int  getHealth(int);
        void printFighter();
        void getExperience(int);
        void playerAttack();    
        Player();
        ~Player();
};

//class FightPub
//{
//  private:
//      Player player;
//      Fighter enemy;
//  public:
//      //void fight();
//      //void getStats();
//};
#endif
#如果没有战斗机#
#定义战斗机
#包括
#包括
#包括
#包括
#包括
#包括
职业拳击手
{   
受保护的:
std::向量x;
std::字符串名;
智力健康水平;
//智力损伤;
公众:
国际卫生组织;
void getknowers(/*std::vector&*/);
void printFighter(/*std::vector&*/);
无效排序权(/*std::vector&*/);
//friend std::istream&operator>>(std::istream&strm,Fighter&x);
//friend std::ostream&operator>line;
y、 名称=行;
输入文件>>行;
y、 level=atoi(line.c_str());
输入文件>>行;
y、 健康=获得健康(y级);
x、 向后推(y);
输入文件>>行;
}而(行!=”);
}                   
}
inputFile.close();
}
}
#布拉格端区
#布拉格马地区卫生
int Fighter::getHealth(int lv)//主要问题
{
如果(lv>=6)
{
//std::cout health=lv*2;
性病::妇科健康1)
{
对于(inti=1;ihealth+=2;}

我不知道你想要什么,我能做的就是读代码

看起来在6级以下,战士会获得额外的(2-2级)生命值。在6级或6级以上,战士会获得精确的(2级)生命值

但是运行状况分配在很多地方,并且它不是从0开始的,所以我不打算尝试计算发生了什么。尝试组织一些事情,这样计算就不会分散到整个程序中

int Fighter::getHealth(int lv) //The main problem
{
    if(lv >= 6)
    {
        //std::cout << "\nHealth Bonus!";
        this->health = lv * 2;
        std::cout << this->health << std::endl;
    }
    else if (lv > 1)
    {
        for (int i=1; i<lv; i++)
        {this->health += 2;}
        std::cout << this->health << std::endl;
    }
    return health;
}
int-Fighter::getHealth(int-lv)//主要问题
{
如果(lv>=6)
{
//std::cout health=lv*2;
性病::妇科健康1)
{
对于(inti=1;ihealth+=2;}

std::cout health问题在于这里的+=

 else if (lv > 1)
    {
        for (int i=1; i<lv; i++)
        {this->health += 2;}
        std::cout << this->health << std::endl;
    }

在for()循环的正上方。

“正确计算”这意味着什么?不要发布你的整个项目并要求人们调试你的代码,而是把输入、预期的输出、所获得的输出、以及你认为是相关代码的一部分进行说明。t除了通过它读取的文件之外。我当前获得的输出是(忽略与程序无关的任何内容):姓名:fdhjje等级:1健康:216姓名:Gererweq等级:2健康:200姓名:dnbq等级:3健康:204姓名:hrbsrx等级:4健康:210姓名:火焰等级:4健康:216姓名:铁托等级:5健康:18姓名:hrbsrx等级:6健康:12姓名:Cthulu等级:99健康:198好问题。在等级1,战斗机的健康从10开始,对于ea来说ch级别在6之前,生命值增加2。如果级别为6或更高,则生命值等于级别的两倍。这使得级别6(生命值=12)可能比级别5(生命值=18)更容易。无论如何,与运行状况初始化相关的所有内容都应包含在一个函数中,并且该函数应被调用为
set\u initial\u health
。如果级别已经是对象的属性,则它不应将级别作为参数。它应分配
运行状况
,而不是返回值。总体而言,代码有很多错误。从一个新的文件并重新实现所有内容,使用复制粘贴来重新组织旧代码。它不会像你想的那么久,除了解决明显的、必要的错误的过程之外。无论如何,你抓住了它!我可以想出两个更好的解决方案,不过:不要使用
temp
对象,也不要执行加法乘法是的,有很多更好的方法来修复这段代码…它真正需要的是高层次的重构和重构。
#include "Fighter.h"



int main()
{   
    unsigned seed = time(0);
    srand(seed);

    /*std::vector<Fighter> baddie;*/

    Fighter * enemy = new Fighter;
    Player * me = new Player;
    enemy->getEnemies(/*baddie*/);
    enemy->sortFighters(/*baddie*/);
    enemy->printFighter(/*baddie*/);
    me->printFighter();
    delete enemy;
    delete me;
    return 0;
}
int Fighter::getHealth(int lv) //The main problem
{
    if(lv >= 6)
    {
        //std::cout << "\nHealth Bonus!";
        this->health = lv * 2;
        std::cout << this->health << std::endl;
    }
    else if (lv > 1)
    {
        for (int i=1; i<lv; i++)
        {this->health += 2;}
        std::cout << this->health << std::endl;
    }
    return health;
}
 else if (lv > 1)
    {
        for (int i=1; i<lv; i++)
        {this->health += 2;}
        std::cout << this->health << std::endl;
    }
<fighter>
Cthulu
99
</fighter>
<fighter>
Gererweq
2
</fighter>
this->health = 10;