在调用之前如何定义此函数?

时间:2016-12-10 18:42:12

标签: c++ function user-defined-functions

我是一名学生正在做一个我需要帮助的小作业项目。我正在制作一个小型的回合制游戏,其中有两个问题。

游戏代码:

#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(播放器,播放器)中调用未定义的函数'menu' < / p>

这可能是因为我在定义菜单之前定义了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'

我基本上被困,我不知道该怎么做。无论我先定义哪一个,我都会收到错误。我已经在班级玩家中宣布了所有这些,为什么会发生这种情况呢?我该如何解决?

另外,如果有人可以告诉我如何使计数器工作,我会非常感激。我想要的是将所造成的伤害加倍,并让计数器最后。这将允许玩家做反击以先获得伤害,然后将伤害加倍。至于atk,mgatk等统计数据,我会将它们加到两个不同的“类”字符上,这些字符将由int变量'type'决定。

对该计划的任何形式的帮助,批评,建议等都非常感谢。提前谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

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

等等。

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

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