调用类函数的C++类函数 我现在正在用C++和SFML 2.3来进行我的塔防游戏,有3个类
主cpp文件中的代码片段 问题:当在tower.h类中调用RangeClimition时,我想将一些变量发送到不同的类mobs类,以实现ReduceMinionHealth函数,并让它降低仆从的生命值调用类函数的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"
#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);