我一直在尝试通过练习类和继承来学习我的期末考试,这是我迄今为止为继承提出的想法,但是我不确定如何解决下面发生的错误。
#include<iostream>
#include<iomanip>
#include<cmath>
#include<string.h>
using namespace std;
//BASE CLASS DEFINITION
class hero
{
protected:
string name;
string mainAttr;
int xp;
double hp;
double mana;
double armour;
int range;
double attkDmg;
bool attkType;
public:
void dumpData();
void getName();
void getMainAttr();
void getAttkData();
void setAttkData(string);
void setBasics(string, string, double, double, double);
void levelUp();
};
//CLASS FUNCTIONS
void hero::dumpData()
{
cout << "Name: " << name << endl;
cout << "Main Attribute: " << mainAttr << endl;
cout << "XP: " << xp << endl;
cout << "HP: " << hp << endl;
cout << "Mana: " << mana << endl;
cout << "Armour: " << armour << endl;
cout << "Attack Range: " << range << endl;
cout << "Attack Damage: " << attkDmg << endl;
cout << "Attack Type: " << attkType << endl << endl;
}
void hero::getName()
{
cout << "Name: " << name << endl;
}
void hero::getMainAttr()
{
cout << "Main Attribute: " << mainAttr << endl;
}
void hero::getAttkData()
{
cout << "Attack Range: " << range << endl;
cout << "Attack Damage: " << attkDmg << endl;
cout << "Attack Type: " << attkType << endl;
}
void hero::setAttkData(string attr)
{
int choice = 0;
if (attr == "Strength")
{
choice = 1;
}
if (attr == "Agility")
{
choice = 2;
}
if (attr == "Intelligence")
{
choice = 3;
}
switch (choice)
{
case 1:
range = 128;
attkDmg = 80.0;
attkType = 0;
break;
case 2:
range = 350;
attkDmg = 60.0;
attkType = 0;
break;
case 3:
range = 600;
attkDmg = 35.0;
attkType = 1;
break;
default:
break;
}
}
void hero::setBasics(string heroName, string attribute, double health, double mp, double armourVal)
{
name = heroName;
mainAttr = attribute;
hp = health;
mana = mp;
armour = armourVal;
}
void hero::levelUp()
{
xp = 0;
hp = hp + (hp * 0.1);
mana = mana + (mana * 0.1);
armour = armour + ((armour*0.1) + 1);
attkDmg = attkDmg + (attkDmg * 0.05);
}
//INHERITED CLASS DEFINITION
class neutHero : protected hero
{
protected:
string drops;
int xpGain;
public:
int giveXP(int);
void dropItems();
};
//INHERITED CLASS FUNCTIONS
int neutHero::giveXP(int exp)
{
xp += exp;
}
void neutHero::dropItems()
{
cout << name << " has dropped the following items: " << endl;
cout << drops << endl;
}
/*
END OF OO!
*/
//FUNCTION PROTOTYPES
void dispMenu();
int main()
{
int exit=0, choice=0, mainAttrChoice=0, heroCreated=0;
double health, mp, armourVal;
string heroName, attribute;
do
{
dispMenu();
cin >> choice;
switch (choice)
{
case 1:
system("cls");
cout << "Please enter your hero name: ";
cin >> heroName;
cout << "\nPlease enter your primary attribute\n";
cout << "1. Strength\n" << "2. Agility\n" << "3. Intelligence\n";
cin >> mainAttrChoice;
switch (mainAttrChoice)
{
case 1:
attribute = "Strength";
health = 750;
mp = 150;
armourVal = 2;
break;
case 2:
attribute = "Agility";
health = 550;
mp = 200;
armourVal = 6;
break;
case 3:
attribute = "Intelligence";
health = 450;
mp = 450;
armourVal = 1;
break;
default:
cout << "Choice invalid, please try again.";
exit = 1;
break;
hero player;
player.setBasics(heroName, attribute, health, mp, armourVal);
player.setAttkData(attribute);
heroCreated=1;
system("cls");
cout << "Your hero has been created!\n\n";
player.dumpData();
system("pause");
break;
}
case 2:
system("cls");
if (heroCreated == 1)
{
cout << "Your hero has been detailed below.\n\n";
**player.dumpData(); //ERROR OCCURS HERE !**
system("pause");
}
else
{
cout <<
"You have not created a hero please exit this prompt "
"and press 1 on the menu to create a hero.";
}
break;
case 3:
system("cls");
cout << "Still Under Development";
system("pause");
break;
case 4:
system("cls");
exit = 1;
break;
default:
cout << "Your command has not been recognised, please try again.\n";
system("pause");
break;
}
}
while (exit != 1);
system("pause");
return 0;
}
void dispMenu()
{
system("cls");
cout <<
"1. Create New Hero\n"
"2. View Current Hero\n"
"3. Fight Stuff\n"
"4. Exit\n\n"
"Enter your choice: ";
}
但是在编译时我得到以下错误:
220 `player' undeclared (first use this function)
不确定如何修复它,因为我最近才开始使用 OO 方法。该错误在上面有一个注释,主要是案例 2。
干杯,伙计们。