Reputation: 23
my name is Josh and I am trying to make this code work but I could achieve nothing so far... Sorry if It is silly and I am wasting your time, I am new to C++ (which I already love), Let me try to explain.
Basicaly what I want to do is insert a enum into a class, set a value to an iten from the enum(class maybe), but I can't access the item to set a value...
eg. Edge of Fight - 24 Physical Damage / 54 Movement Speed / 5 Ability Power. Sorry for the bad English, it is not my main language...
#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();
}
I've updated the code, but got a error that I am cracking my head trying to fix it. I'll explain what I am trying to do now.
I want the problem to update Hero's current pd,ap,ms with the addition of the gunnersBreak item
UPDATED CODE!
#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();
}
Upvotes: 2
Views: 146
Reputation: 1174
It's because you are trying to use your enum
like struct
and assign value to one of its element. enums
are list of named values which can be used to represent some values (like i.e. flags or states) that are unhandy and/or unsafe to represent by arithmetic types.
Your itensID iID
is a variable of your itensID
enum class type, so you can assign to it one of named values which you listed in itensID
enum class body (i.e. iID = itensID::edgeOfFight
).
Upvotes: 2