因此,我有一系列怪物和一个显示其名称的函数。问题是调试器说Mons(数组)未定义。我想知道我在做什么错。请帮忙!
错误大部分是未定义的Mons。
#include <iostream>
#include <fstream>
#include <windows.h>
#include <time.h>
/**
RPG v0.1.6
-
**/
//-- WinAPI stuff
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;
/* Move the cursor home */
SetConsoleCursorPosition( hStdOut, homeCoords );
}
class Player {
public:
int HP;
int MHP;
int STR;
int AGI;
int RES;
int XP;
int LVL;
Player() { HP = 8; MHP = 8; STR = 4; AGI = 3; RES = 2; XP = 0; LVL = 1; };
private:
};
struct DT {
void save_to_file(std::string filename, const Player& P)
{
std::ofstream f( filename.c_str() );
f << P.HP << std::endl;
f << P.MHP << std::endl;
f << P.STR << std::endl;
f << P.AGI << std::endl;
f << P.RES << std::endl;
f << P.XP << std::endl;
f << P.LVL << std::endl;
}
bool load_from_file(std::string filename, Player& P) {
std::ifstream f( filename.c_str() );
f >> P.HP;
f >> P.MHP;
f >> P.STR;
f >> P.AGI;
f >> P.RES;
f >> P.XP;
f >> P.LVL;
if(f.good()){
std::cout << "Success!" << std::endl;
}
else {
std::cout << "Failure" << std::endl;
}
return f.good();
}
};
class Monster {
public:
int HP;
int MHP;
int STR;
int AGI;
int RES;
int XP;
std::string name;
///For Calling
Monster() { };
///Set variables for new battle
Monster(int A, int B, int C, int D, int E, int F, std::string G){
this->HP = A;
this->MHP = B;
this->STR = C;
this->AGI = D;
this->RES = E;
this->XP = F;
this->name = G;
};
void setStats(int A, int B, int C, int D, int E, int F, std::string G){
this->HP = A;
this->MHP = B;
this->STR = C;
this->AGI = D;
this->RES = E;
this->XP = F;
this->name = G;
};
};
int monstersalive = 3;
// -- Call Functions
void BtlDisplay(Player& P, Mons M[]);
void Battle(Player& P, Mons M[]);
int main()
{
// -- Call Classes
Player p;
DT d;
Monster Mons[3];
for(int j = 0; j < 3; j++){
Mons[j].setStats(9,9,9,9 + j,9,9,"Noob");
}
BtlDisplay(p,Mons);
//Battle(p,m);
d.save_to_file("GameData1.txt", p);
d.save_to_file("GameData2.txt", p);
d.save_to_file("GameData3.txt", p);
return 0;
}
void BtlDisplay(Player& P, Mons M[]) //-- Displays battle stats
{
ClearScreen();
std::cout << "---------" << std::endl;
std::cout << "L " << P.LVL << std::endl;
std::cout << "HP " << P.HP << "/" << P.MHP << std::endl;
std::cout << "---------\n\n" << std::endl;
std::cout << "Monsters\n--------" << std::endl;
for(int i = 0; i < 3; i++){
if(M[i].HP > 0){
}
}
}
void Battle(Player& P, Mons M[])
{
while(monstersalive > 0 && P.HP > 0){
srand(time(NULL));
}
}
最佳答案
void BtlDisplay(Player& P, Mons M[]);
这就是说,您要将数组传递给名为
M
的参数,其中元素的类型为Mons
。但是
Mons
不是类型,它是局部变量的名称。类型是Monster
。尝试
void BtlDisplay(Player& P, Monster M[])
甚至
void BtlDisplay(Player& P, Monster Mons[])