在调用它之前如何定义这个函数?
How can I define this function before I call it?
我是一名学生,正在做一个我需要帮助的小型家庭作业项目。我正在制作一款小型回合制游戏,其中有 2 个问题。
游戏代码:
#include<iostream.h>
class player
{
public:
int health;
char name[15];
int atk;
int mgatk;
int agi;
int def;
int mgdef;
int turnvalid;
int type;
int ctr;
void turnend(player, player);
void attack(player, player);
void block(player, player);
void menu(player, player);
};
void turnend(player p1, player p2)
{
if(p1.turnvalid == 1)
{
menu(p1, p2);
}
else
{
menu(p2, p1);
}
}
void attack(player p1, player p2)
{
if(p1.turnvalid == 1)
if(p1.type == 1)
{
p2.health = p2.health - (p1.atk/p2.def)*100;
}
else if(p1.type == 2)
{
p2.health = p2.health - (p1.mgatk/p2.mgdef)*100;
}
p1.turnvalid = 0;
turnend(p1, p2);
}
void block(player p1, player p2)
{
if(p1.type == 1)
{
p2.health = p2.health - (p1.atk/p2.def)*50;
}
else if(p1.type == 2)
{
p2.health = p2.health - (p1.mgatk/p2.mgdef)*50;
}
p1.turnvalid = 0;
turnend(p1, p2);
}
void menu(player p1, player p2)
{
int ch;
cout<< "What will you do? \n1.Attack\n2.Block\n3.Counter";
cin >> ch;
switch(ch)
{
case '1':
attack(p1, p2);
break;
case '2':
block(p1, p2);
break;
case '3':
default:
{
cout<< "\nWrong choice! Enter again...\n";
menu(p1, p2);
}
}
}
// this is not a part I am currently using because I can't
// figure out how to make it work
void counter(player p1, player p2)
{
cout<< "Player " << p1.name << "countered!";
}
void main()
{
cout<<"Beginning the game! Know your options!\nAttack to deal damage.\n"
"Block to reduce damage taken.\nCounter to take damage, then deal "
"twice the damage you took on the same turn.";
}
在这个回合制游戏中,玩家现在有两个选择:攻击或格挡。他们 运行 很好,但是当我再次将他们重定向到转向菜单时,问题出现了。每当我调用该函数时,它都会说:
[错误] c:\users\vive\desktop\not games\utilities\c++ programs\game2.cpp:27: E2268 在函数 turnend(player,player) 中调用未定义的函数 'menu'
这可能是因为我在定义菜单之前定义了 turnend。但是如果我在 turnend 之前定义菜单,就会发生这种情况:
[错误] c:\users\madhav\desktop\not games\utilities\c++ programs\game2.cpp:30: E2268 在功能菜单中调用未定义的功能 'attack' (玩家,玩家)
[错误] c:\users\madhav\desktop\not games\utilities\c++ programs\game2.cpp:34: E2268 在功能菜单中调用未定义的功能 'block' (玩家,玩家)
我基本上被困住了,我不知道该怎么办。无论我先定义哪个,都会出错。我已经在 class 播放器本身中声明了它们,那么为什么会这样呢?我该如何解决?
此外,如果有人能告诉我如何使计数器正常工作,我将不胜感激。我想要的是造成双倍的伤害,并让反击持续下去。这将允许进行反击的玩家先受到伤害,然后 return 双倍伤害。至于atk,mgatk等属性,我会贴在两个不同的'classes'字符上,由int变量'type'.
决定
非常感谢对程序的任何帮助、批评、建议等。提前致谢!
您的错误是由于定义中函数名称前面缺少 player::
引起的。
只需替换
void attack(player p1, player p2){
(...)
和
void player::attack(player p1, player p2){
(...)
等等。
如果您不通过将 class 名称放在函数名称之前(或在 class 中定义它)将定义的函数标记为 class 的成员,编译器会将其识别为完全不同的功能。
但学习将代码分为头文件和源文件可能会更好,以避免将来出现更复杂的错误。
我是一名学生,正在做一个我需要帮助的小型家庭作业项目。我正在制作一款小型回合制游戏,其中有 2 个问题。
游戏代码:
#include<iostream.h>
class player
{
public:
int health;
char name[15];
int atk;
int mgatk;
int agi;
int def;
int mgdef;
int turnvalid;
int type;
int ctr;
void turnend(player, player);
void attack(player, player);
void block(player, player);
void menu(player, player);
};
void turnend(player p1, player p2)
{
if(p1.turnvalid == 1)
{
menu(p1, p2);
}
else
{
menu(p2, p1);
}
}
void attack(player p1, player p2)
{
if(p1.turnvalid == 1)
if(p1.type == 1)
{
p2.health = p2.health - (p1.atk/p2.def)*100;
}
else if(p1.type == 2)
{
p2.health = p2.health - (p1.mgatk/p2.mgdef)*100;
}
p1.turnvalid = 0;
turnend(p1, p2);
}
void block(player p1, player p2)
{
if(p1.type == 1)
{
p2.health = p2.health - (p1.atk/p2.def)*50;
}
else if(p1.type == 2)
{
p2.health = p2.health - (p1.mgatk/p2.mgdef)*50;
}
p1.turnvalid = 0;
turnend(p1, p2);
}
void menu(player p1, player p2)
{
int ch;
cout<< "What will you do? \n1.Attack\n2.Block\n3.Counter";
cin >> ch;
switch(ch)
{
case '1':
attack(p1, p2);
break;
case '2':
block(p1, p2);
break;
case '3':
default:
{
cout<< "\nWrong choice! Enter again...\n";
menu(p1, p2);
}
}
}
// this is not a part I am currently using because I can't
// figure out how to make it work
void counter(player p1, player p2)
{
cout<< "Player " << p1.name << "countered!";
}
void main()
{
cout<<"Beginning the game! Know your options!\nAttack to deal damage.\n"
"Block to reduce damage taken.\nCounter to take damage, then deal "
"twice the damage you took on the same turn.";
}
在这个回合制游戏中,玩家现在有两个选择:攻击或格挡。他们 运行 很好,但是当我再次将他们重定向到转向菜单时,问题出现了。每当我调用该函数时,它都会说: [错误] c:\users\vive\desktop\not games\utilities\c++ programs\game2.cpp:27: E2268 在函数 turnend(player,player) 中调用未定义的函数 'menu'
这可能是因为我在定义菜单之前定义了 turnend。但是如果我在 turnend 之前定义菜单,就会发生这种情况:
[错误] c:\users\madhav\desktop\not games\utilities\c++ programs\game2.cpp:30: E2268 在功能菜单中调用未定义的功能 'attack' (玩家,玩家)
[错误] c:\users\madhav\desktop\not games\utilities\c++ programs\game2.cpp:34: E2268 在功能菜单中调用未定义的功能 'block' (玩家,玩家)
我基本上被困住了,我不知道该怎么办。无论我先定义哪个,都会出错。我已经在 class 播放器本身中声明了它们,那么为什么会这样呢?我该如何解决?
此外,如果有人能告诉我如何使计数器正常工作,我将不胜感激。我想要的是造成双倍的伤害,并让反击持续下去。这将允许进行反击的玩家先受到伤害,然后 return 双倍伤害。至于atk,mgatk等属性,我会贴在两个不同的'classes'字符上,由int变量'type'.
决定非常感谢对程序的任何帮助、批评、建议等。提前致谢!
您的错误是由于定义中函数名称前面缺少 player::
引起的。
只需替换
void attack(player p1, player p2){
(...)
和
void player::attack(player p1, player p2){
(...)
等等。
如果您不通过将 class 名称放在函数名称之前(或在 class 中定义它)将定义的函数标记为 class 的成员,编译器会将其识别为完全不同的功能。
但学习将代码分为头文件和源文件可能会更好,以避免将来出现更复杂的错误。