簡體   English   中英

調用另一個類函數內部的C ++類函數

[英]c++ class function inside call to another class function

我目前正在使用3類c ++和sfml 2.3開發我的塔防游戲

我的主要cpp文件中的代碼片段

問題:當在tower.h類中調用RangeCollision()時,我想將一些變量發送到不同的類(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);

我相信這應該可以解決您的問題,但是我不太確定問題到底出在哪里。 如果是關於傳遞變量的事情,請記住通過引用傳遞它們。

編輯:我試圖理解Zehryo Karham在評論中說的話。 我只是讀評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM