Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用类函数的C++类函数 我现在正在用C++和SFML 2.3来进行我的塔防游戏,有3个类_C++_Function_Class - Fatal编程技术网

调用类函数的C++类函数 我现在正在用C++和SFML 2.3来进行我的塔防游戏,有3个类

调用类函数的C++类函数 我现在正在用C++和SFML 2.3来进行我的塔防游戏,有3个类,c++,function,class,C++,Function,Class,主cpp文件中的代码片段 问题:当在tower.h类中调用RangeClimition时,我想将一些变量发送到不同的类mobs类,以实现ReduceMinionHealth函数,并让它降低仆从的生命值 #include <Defines.h> //defining bunch of includes and defines #include "Mobs.h" #include "Towers.h" #include "MainClass.h"

主cpp文件中的代码片段

问题:当在tower.h类中调用RangeClimition时,我想将一些变量发送到不同的类mobs类,以实现ReduceMinionHealth函数,并让它降低仆从的生命值

    #include <Defines.h> //defining bunch of includes and defines

    #include "Mobs.h"
    #include "Towers.h"
    #include "MainClass.h"
    int main() {
    MainClass* mainObj = new MainClass();
    TowerClass* towerObj = new TowerClass();
    MobsClass* mobsObj = new MobsClass();
    //keeps checking for actions and detecting clicks
    towerObj->BulletCollision(mobsObj->Mob1v, speedMultiplier); //detects when bullet reached minion
    if (mainObj->waveStarted) mobsObj->MobPathing(speedMultiplier); //minions moving their path
    //drawing sprites
    return(0);
    }
})

h类文件

#ifndef Towers_h
#define Towers_h

#include <Defines.h>
#include "MainClass.h"

class TowerClass: public MainClass {
private:
    vector<int> towerDmg;
    vector<int> towerCost;
    vector<float> towerRange;
public:
    bool Clicked;
    float dx, dy, magnitude;
    //loading textures and other variables

typedef struct {
    //sprites, tower params
    vector<Sprite> bullet;
    vector<int> shootAt;
}towerParamStruct;

vector<towerParamStruct> TowerParam;

TowerClass::TowerClass() {
//constructor
}

void BulletCollision(vector<Sprite> &Mob1v, float speedMultiplier) {
     //doing some stuff and at some point calling 
     MobsClass::MinionHealthReduce(int i, double DamageDealt) //gives me error
}
};
暴徒。h级以下

#ifndef Mobs_h
#define Mobs_h

#include "Defines.h"
#include "MainClass.h"

class MobsClass: public MainClass {
    private:
        vector<double> *Health, *levelHealth;
        vector<int> *levelMobsCount, *levelCoins;
    public:
    Sprite Mob1;
    vector<Sprite> Mob1v;

    MobsClass::MobsClass() {
    //constructor which prepares for first wave
    }

    void MinionHealthReduce(int i, double DamageDealt) {
        if (Health->at(i) > 0) {
            //recalculating hp bar
            Health->at(i) = Health->at(i) - DamageDealt;
        }
        if (Health->at(i) <= 0) {
            //add coins because u killed minion
            //destroys minion
        }
    }
};

我相信我在以下几行中看到了你的错误:

移动类:MinionHealthReduceint i,造成双重伤害

我可以看到3个错误:

没有分号

需要使用对象调用

不能用int i调用,双重伤害处理

固定版本:

MobsClass* mobsObj = new MobsClass();
mobsObj.MinionHealthReduce(i, DamageDealt);
我相信这应该能解决你的问题,但我不太确定到底是什么问题。 如果是关于传递变量的,记得通过引用传递它们


编辑:我想了解泽里约·卡汉姆在评论中说的话。我刚看了评论。

不清楚你在问什么。请更具体一点。TowerClass::MinionHealthReduceint i,double DamageDealed可能需要调用一个实例,除非它是TowerClass的静态类成员。我想从TowerClass函数RangeClimition内部将一些变量发送到mobs类函数ReduceMinionHealth并降低其内部的仆从生命值。您尝试调用的函数是MobsClass的成员而不是TowerClass,因此除非它是MobsClass的静态成员,否则您无法调用是这样的。即使是你也需要把它称为MobsClass:MiNealSealthRealEngy仍然是初学者,在C++中我不能用任何其他语言来编码,但我想我知道问题在哪里:你在BulnBrand中做的事情与调用外部对象的方法无关。相反,您要做的是将mobsObj对象作为指针传递到BulletCollision中。这样,您就可以将手放在实际对象上,其健康方法将正确响应。
MobsClass* mobsObj = new MobsClass();
mobsObj.MinionHealthReduce(i, DamageDealt);