对另一个类函数的调用中的c++类函数

c++ class function inside call to another class function

本文关键字:类函数 c++ 调用 另一个      更新时间:2023-10-16

我目前正在用c++和sfml 2.3开发我的塔防游戏,有3个等级的

我的主cpp文件中的代码片段

问题:当RangeCollision()在tower.h类中被调用时,我想将一些变量发送到不同的类(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);
    }

MainClass.h文件

#ifndef MainClass_h
#define MainClass_h
#include "Defines.h"
class MainClass {
    static int map[];
public:
    static int coins, lives;
    static bool waveStarted;
    MainClass::MainClass() {
        //constructor loading some stuff
    }
//bunch of functions

};

tower.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
}
};

低于的mobs.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
        }
    }
};

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

MobsClass::MinionHealthReduce(int i, double DamageDealt)

我可以看到3个错误:

  1. 没有分号

  2. 需要使用对象调用

  3. 无法使用(int i, double DamageDealt) 调用

固定版本:

MobsClass* mobsObj = new MobsClass();
mobsObj.MinionHealthReduce(i, DamageDealt);

我相信这应该能解决你的问题,但我不太确定到底是什么问题。如果是传递变量,请记住通过引用传递它们。

编辑:我正试图理解泽里奥·卡拉姆在评论中所说的话。我刚看了评论。