gpt4 book ai didi

C++将值设置为类内的枚举项

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:09 25 4
gpt4 key购买 nike

我叫 Josh,我正在尝试使这段代码正常工作,但到目前为止我一事无成...抱歉,如果这很愚蠢,我在浪费你的时间,我是 C++ 的新手(我已经很喜欢),让我试着解释一下。

基本上我想做的是将一个枚举插入到一个类中,将一个值设置为枚举中的一个iten(也许是类),但我无法访问该项目来设置一个值...

例如。战斗边缘 - 24 物理伤害/54 移动速度/5 法术强度。对不起英语不好,它不是我的主要语言......

#include <iostream>

using namespace std;






class Enemy {
protected:
int physicalDamage;
double moveSpeed;
int abilityPower;
public:
void setPhysicalDamage(int p) {
physicalDamage = p;
}
void setMoveSpeed(int m) {
moveSpeed = m;
}
void setAbilityPower(int ap) {
abilityPower = ap;
}

virtual void attack() = 0;
virtual void ability() = 0;
virtual void speed() = 0;


};

class Itens: public Enemy {
protected:
enum class itensID {
gunnersBreaker,
hitswamSword,
fineshotsWrath,
banesBook,
infinityStar,
edgeOfFight,
};

itensID iID;
public:

void setItensID(int r) {

iID.edgeOfFight = r; // Gives me error, I don't really know a way around that...
}; // But basically what I wanna do is marked in double slashes...
// I don't know if I should use pointers for that, but I tried and it also didn't work...



};

class Ninja : public Enemy {
public:
void attack() {
cout << "Hero: Ninja." << endl;
cout << "Physical Damage: " << physicalDamage << endl;
}
void ability() {
cout << "Ability Power: " << abilityPower << endl;
}
void speed() {
cout << "Movement Speed: " << moveSpeed << endl;
}
};

class Monster : public Enemy {
public:
void attack() {
cout << "Hero: Monster." << endl;
cout << "Physical Damage: " << physicalDamage << endl;
}
void ability() {
cout << "Ability Power: " << abilityPower << endl;
}
void speed() {
cout << "Movement Speed: " << moveSpeed << endl;
}
};

int main() {
Ninja n;
Monster m;
Enemy *e1 = &n;
Enemy *e2 = &m;

/*

Find a way to set an enum item to the Ninja hero

*/

e1->setPhysicalDamage(203);
e1->setAbilityPower(12);
e1->setMoveSpeed(321.32);
e2->setPhysicalDamage(40);
e2->setAbilityPower(654);
e2->setMoveSpeed(310.44);

n.attack();
n.ability();
n.speed();
m.attack();
m.ability();
m.speed();
}

我已经更新了代码,但出现错误,我正在绞尽脑汁试图修复它。我将解释我现在想做什么。

我希望问题通过添加 gunnersBreak 项目来更新 Hero 的当前 pd、ap、ms

更新代码!

#include <iostream>
#include <string>

using namespace std;



struct itensID {
void gunnersBreaker(int pd, int ap, float ms);
void hitswamSword(int pd, int ap, float ms);
void fineshotsWrath(int pd, int ap, float ms);
void banesBook(int pd, int ap, float ms);
void infinityStar(int pd, int ap, float ms);
void edgeOfFight(int pd, int ap, float ms);
};


void itensID::gunnersBreaker(int pd, int ap, float ms)
{
int physicalDamage = pd;
int abilityPower = ap;
float moveSpeed = ms;

cout << "\n Shotgun: Gunner's Break " << endl;
cout << "\n Stats:";
}

void itensID::hitswamSword(int pd, int ap, float ms)
{
}

void itensID::fineshotsWrath(int pd, int ap, float ms)
{
}

void itensID::banesBook(int pd, int ap, float ms)
{
}

void itensID::infinityStar(int pd, int ap, float ms)
{
}

void itensID::edgeOfFight(int pd, int ap, float ms)
{
}



class Enemy {
protected:
int physicalDamage;
int abilityPower;
float moveSpeed;

public:
void setEnemyStatus(int p, int a, float m) {
physicalDamage = p;
abilityPower = a;
moveSpeed = m;
}

virtual void attack() = 0;
virtual void ability() = 0;
virtual void speed() = 0;


};

// Basically what I wanna do now is, add two or three values to the items eg. gunnersBreaker (int pd, int ap & float ms)
// Since I am struggling to get this going, I have decided to set them as string, just to print while I figure-
// out how to add multiple values for a item in a structure, maybe I should make them a void function instead-
// of a regular variable? (I would discard this since regular variables takes only one identifier, I guess)
// or should I make it a class instead?



class Ninja : public Enemy {
public:
void attack() {
cout << "Hero: Ninja." << endl;
cout << "Physical Damage: " << physicalDamage << endl;
}
void ability() {
cout << "Ability Power: " << abilityPower << endl;
}
void speed() {
cout << "Movement Speed: " << moveSpeed << endl;
}
};

class Monster : public Enemy {
public:
void attack() {
cout << "Hero: Monster." << endl;
cout << "Physical Damage: " << physicalDamage << endl;
}
void ability() {
cout << "Ability Power: " << abilityPower << endl;
}
void speed() {
cout << "Movement Speed: " << moveSpeed << endl;
}
};

int main() {
Ninja n;
Monster m;
Enemy *e1 = &n;
Enemy *e2 = &m;
itensID iID;

/*
on the lines below ptr1 and ptr2, I got kind of an error,
I got to find a way to calculate the Enemy Status with the addition of the item specs
and print out the item I am using, EG. Hero: Ninja!
Weapon: Gunner's Breaker.
Stats.... and so on...
*/

e1->setEnemyStatus(35,10,310.21) + iID.gunnersBreaker(33,11,32.32); // ptr1
e2->setEnemyStatus(54,65,235.30); // ptr2

n.attack();
n.ability();
n.speed();
m.attack();
m.ability();
m.speed();
}

最佳答案

这是因为您正在尝试像 struct 一样使用您的 enum 并为其元素之一赋值。 enums 是命名值的列表,可用于表示一些值(如标志或状态),这些值不便于和/或不安全地用算术类型表示。您的 itensID iID 是您的 itensID 枚举类类型的变量,因此您可以为其分配您在 itensID 枚举中列出的命名值之一类主体(即 iID = itensID::edgeOfFight)。

关于C++将值设置为类内的枚举项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52388635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com