gpt4 book ai didi

c++ - 在调用它之前如何定义这个函数?

转载 作者:行者123 更新时间:2023-11-27 23:58:09 25 4
gpt4 key购买 nike

我是一名学生,正在做一个我需要帮助的小型家庭作业项目。我正在制作一款小型回合制游戏,其中有 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.";
}

在这个回合制游戏中,玩家现在有 2 个选择:攻击或阻挡。它们运行良好,但是当我再次将它们重定向到转向菜单时出现问题。每当我调用该函数时,它都会说:[错误] c:\users\vive\desktop\not games\utilities\c++ programs\game2.cpp:27: E2268 Call to undefined function 'menu' in function turnend(player,player)

这可能是因为我在定义菜单之前定义了 turnend。但是如果我在 turnend 之前定义菜单,就会发生这种情况:

[错误] c:\users\madhav\desktop\not games\utilities\c++ programs\game2.cpp:30: E2268 在功能菜单中调用未定义的功能“攻击”(玩家,玩家)

[错误] c:\users\madhav\desktop\not games\utilities\c++ programs\game2.cpp:34: E2268 Call to undefined function 'block' in function menu(player,player)

我基本上被困住了,我不知道该怎么办。无论我先定义哪个,都会出错。我已经在 class player 本身中声明了它们,那么为什么会这样呢?我该如何解决?

此外,如果有人能告诉我如何使计数器正常工作,我将不胜感激。我想要的是造成双倍的伤害,并让反击持续下去。这将允许进行反击的玩家先承受伤害,然后返回双倍的伤害。至于 atk、mgatk 等统计数据,我会将它们附加到两个不同的字符“类”,这将由 int 变量“类型”确定。

非常感谢对程序的任何帮助、批评、建议等。提前致谢!

最佳答案

您的错误是由于定义中函数名称前面缺少 player:: 引起的。只需替换

void attack(player p1, player p2){
(...)

void player::attack(player p1, player p2){
(...)

等等。

当您不通过将类名放在函数名之前(或在类中定义它)将定义的函数标记为类的成员时,编译器会将其识别为完全不同的函数。

但是学习将代码划分为头文件和源文件可能会更好,以避免将来出现更复杂的错误。

关于c++ - 在调用它之前如何定义这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41079007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com