-
classes and header files
Below you will see two header files and an implementation file(the one that has errors). I have included the error messages I am recieving below the two files. I don't know what I am doing wrong, so if you have and questions, just ask.
-also included the systemhlp.h file, just in case you wanna try and compile it; all the files are there for you.
thanks.
Code:
//enemy.h
#ifndef _enemy_h_
#define _enemy_h_
#include "player.h"
class Player;//forward declaration
using namespace std;
class Enemy
{
public:
void stats();
void bStats();
int attack(Enemy& enemyN, Player* playerN);
Enemy(int num);
private:
int m_hp;//=======================LINE 19======================
int m_mp;
int m_str;
int m_exp;
int m_level;
string m_name;
};
#endif
Code:
//player.h
#ifndef _player_h_
#define _player_h_
#include "enemy.h"
class Enemy;//forward declaration
using namespace std;
class Player
{
public:
Player(int gClass);
void levelUp();
bool canLevelUp();
void stats();
void bStats();
int attack(Enemy* enemyN, Player& playerN);
void inventory();
int heal(Player playerN);
//int mag(Player* playerN, Enemy* enemyN, string spell);
private:
int MAX_HP;
int MAX_MP;
int m_level;
int m_hp;
int m_str;
int m_mp;
int m_exp;
int m_mPow;
char m_name[12];//Player's name
};
#endif
Code:
//player.cpp
#include<iostream>
#include<string>
#include <stdio.h>
#include <stdlib.h>
#include "systemhlp.h"
#include "player.h"
#include "enemy.h"
using namespace std;
Player::Player(int gClass)
{
if(gClass == 1)
{
m_level = 1;
m_hp = 100;
m_str = 20;
m_mp = 50;
MAX_HP = m_hp;
MAX_MP = m_mp;
}
if(gClass == 2)
{
m_level = 1;
m_hp = 80;
m_str = 10;
m_mp = 100;
MAX_HP = m_hp;
MAX_MP = m_mp;
}
if(gClass == 3)
{
m_level = 1;
m_hp = 90;
m_str = 15;
m_mp = 75;
MAX_HP = m_hp;
MAX_MP = m_mp;
}
};
bool Player::canLevelUp()
{
if(m_level == 1 && m_exp >= 32)
{
return true;
}
else if(m_level == 2 && m_exp >= 96)
{
return true;
}
else if(m_level == 3 && m_exp >= 208)
{
return true;
}
else if(m_level == 4 && m_exp >= 400)
{
return true;
}
else if(m_level == 5 && m_exp >= 672)
{
return true;
}
else if(m_level == 6 && m_exp >= 1056)
{
return true;
}
else if(m_level == 7 && m_exp >= 1552)
{
return true;
}
else if(m_level == 8 && m_exp >= 2184)
{
return true;
}
else if(m_level == 9 && m_exp >= 2976)
{
return true;
}
else if(m_level == 10 && m_exp >= 3936)
{
return true;
}
else if(m_level == 11 && m_exp >= 5080)
{
return true;
}
else if(m_level == 12 && m_exp >= 6432)
{
return true;
}
else if(m_level == 13 && m_exp >= 7992)
{
return true;
}
else if(m_level == 14 && m_exp >= 9784)
{
return true;
}
else if(m_level == 15 && m_exp >= 11840)
{
return true;
}
else if(m_level == 16 && m_exp >= 14152)
{
return true;
}
else if(m_level == 17 && m_exp >= 16736)
{
return true;
}
else if(m_level == 18 && m_exp >= 19616)
{
return true;
}
else if(m_level == 19 && m_exp >= 22832)
{
return true;
}
else
{
return false;
}
}
void Player::levelUp()
{
m_level++;
if(m_level <= 10 && canLevelUp() == true)
{
m_hp += 50;
m_str += 5;
m_mp += 50;
MAX_HP = m_hp;
MAX_MP = m_mp;
}
if(m_level <= 15 && canLevelUp() == true)
{
m_hp += 45;
m_str += 4;
m_mp += 45;
MAX_HP = m_hp;
MAX_MP = m_mp;
}
if(m_level <= 20 && canLevelUp() == true)
{
m_hp += 35;
m_str += 3;
m_mp += 35;
MAX_HP = m_hp;
MAX_MP = m_mp;
}
}
void Player::stats()
{
cout<<".~-Stats-~."<<endl;
cout<<"Level: "<<m_level<<endl;
cout<<m_name<<endl;
cout<<"HP: "<<m_hp<<endl;
cout<<"MP: "<<m_mp<<endl;
cout<<"Strength: "<<m_str<<endl;
cout<<"Exp: "<<m_exp<<endl;
system("pause");
}
void Player::bStats()
{
cout<<m_name<<endl;
cout<<"HP: "<<m_hp<<endl;
cout<<"MP: "<<m_mp<<endl;
cout<<"\n"<<endl;
}
int Player::heal(Player playerN)
{
if(playerN.m_mp >= 5)
{
int x = ((playerN.m_level*playerN.MAX_MP)/128) + ((rand() % 6) + 4);
system("cls");
cout<<"You gain "<<x<<" points of health!\n"<<endl;
system("pause");
playerN.m_hp = playerN.m_hp + x;
playerN.m_mp = playerN.m_mp - 5;
if(playerN.m_hp > playerN.MAX_HP)
{
playerN.m_hp = playerN.MAX_HP;
}
return playerN.m_mp, playerN.m_hp;
}
}
int Player::attack(Enemy* enemyN, Player& playerN)
{
cls();
int x = 20 * (playerN.m_str/100) * 20;
int criticalHit = x * (2/10);
if(((rand() % 6) + 1) == 3)
{
x += criticalHit;
cout<<"Critical Hit!"<<endl;
}
enemyN->m_hp = enemyN->m_hp - x;//=========LINE 304==============
cout<<"You hit for "<<x<<" points of damage!\n"<<endl;
pause();
cls();
if(enemyN->m_hp < 0)//==================LINE 308================
{
enemyN->m_hp = 0;//=================LINE 310===============
}
return enemyN->m_hp; //==================LINE 313==============
}
Code:
Line Message File
19 `int enemy.h
304 within player.cpp
19 `int enemy.h
304 within player.cpp
19 `int enemy.h
308 within player.cpp
19 `int enemy.h
310 within player.cpp
19 `int enemy.h
313 within player.cpp
Code:
//systemhelp.h
#include <iostream>
#include <stdlib.h>
void pause()
{
std::cout<<"\n\n==>"<<std::endl;
std::cin.ignore(std::cin.rdbuf()->in_avail() + 1);
}
void cls()
{
system("cls");
}
-
In both header files, you only need the forward declarations, not the #includes.
-
Thanks for that little bit of information, lol, I didn't realize I put that in there. But, unfortuantely I still have all of the listed errors (thanks for the help though).
-
That's the entire text of your errors?
-
yeah, I copied it straight from the compiler.
-
Is something wrong with your compiler? That is not an error message. Maybe you need to expand the window or something?
There might be another window that has the full text of the error message (like an output window). It's hard to work without actual error messages.
-
BTW this would be much better than a large number of if statements:
Code:
bool Player::canLevelUp()
{
// XPToNextLevel[10], for example, is the XP needed to be able to level to 11.
// First entry is 0 because we start at level 1.
const static int XPToNextLevel[] = {0, 32, 96, 208, 400, 672, 1056, 1552, 2814, 2976, 3936,
5080, 6432, 7992, 9784, 11840, 14152, 16736, 19616, 22832};
return (m_xp >= XPToNextLevel[m_level] );
}
-
yeah, I just found the compile log, which shows the FULL error. It said that m_hp was declared private in both instances and all I had to do was make it public.
thanks.
-
Better design might be to keep it private and provide a set and/or get method for it.