C++ 外部函数创建类对象,但main.cpp无法调用此新对象?

C++ 外部函数创建类对象,但main.cpp无法调用此新对象?,c++,function,class,constructor,main,C++,Function,Class,Constructor,Main,我正在尝试为我的主机游戏制作一个怪物生成器,但遇到了一个可能需要解决的简单问题,问题是我对这种语言有点陌生 在my main.cpp中,我创建了一个名为generateMonster的函数: generateMonster所做的就是随机生成6个数字,这些数字将成为这个新怪物的属性 generateMonster成功创建了一个具有随机属性的怪物,但是为什么我不能通过main.cpp调用这个新怪物呢?每当我运行构建时,它都会显示: 错误:名称未在此范围内声明,如果我将其更改为Monster::nam

我正在尝试为我的主机游戏制作一个怪物生成器,但遇到了一个可能需要解决的简单问题,问题是我对这种语言有点陌生

在my main.cpp中,我创建了一个名为generateMonster的函数: generateMonster所做的就是随机生成6个数字,这些数字将成为这个新怪物的属性

generateMonster成功创建了一个具有随机属性的怪物,但是为什么我不能通过main.cpp调用这个新怪物呢?每当我运行构建时,它都会显示:

错误:名称未在此范围内声明,如果我将其更改为Monster::name.returnHp;然后它说错误:name不是“Monster”的成员。但事实上,我只是用构造函数创建了“name”

main.cpp

#include <iostream>
#include <windows.h>
#include <time.h>
#include "Character.h"
#include "Monster.h"

using namespace std;

void generateMonster();
int main()
{
    Character Bryan = Character(1,2,5,1,10,6);
    int choice;
    while(true)
    {
        cin >> choice;
        if(choice == 1)
            {

                generateMonster();
                cout << "Monster Stats:\n\n";
                cout << "Life Points: " << name.returnHp() << endl ;
                cout << "Endurance Chance: " << name.returnEndur() << endl ;
                cout << "Dmg: " << name.returnDmg() << endl ;
                cout << "Armor: " << name.returnArmor() << endl ;
                cout << "Evasion Chance: " << name.returnEvasion() << endl ;
                cout << "Agility Chance: " << name.returnAgility() << endl ;

            }
    }



    return 0;
}

void generateMonster()
{
    int random ;
    int i, j, k, nums[50];
    srand(time(NULL)) ;
    for( i = 0; i < 50 ; i++)
        {
            nums[i] = i;
        }
    for (i = 0; i < 50; i++)
        {
            j = (rand() % 50) ;
            k = nums[i] ; nums[i] = nums[j] ; nums[j] = k ; //switch rands
        }

    Monster name = Monster(nums[4],nums[45],nums[34],nums[21],nums[37],nums[41]);
    //creates an object(Monster class) called name with the random attributes

}
Monster.cpp

#include "Monster.h"
#include <iostream>

Monster::Monster(int hp,int endur,int dmg,int armor,int evasion, int agility)
 {
    c_hp = hp * 50;
    c_maxHp = hp * 50;
    c_endur = endur * 3;
    c_dmg = dmg * 2;
    c_armor = armor * 2.5;
    c_evade = evasion * 2;
    c_agility = agility * 3;
 }

 void Monster::takeDmg(float dmg)
 {
    using std::cout;
    float trueArmor,trueDmg;
    trueArmor = c_armor / 1.60;
    trueDmg = dmg - trueArmor;
       if(c_hp - trueDmg <= 0)
         {
           cout << "You have slain the creature!";
           c_hp = 0;

         }
      else
         {
           c_hp = c_hp - trueDmg;
         }
 }

 //simple return functions
 float Monster::returnHp(){return c_hp;}
 float Monster::returnMaxHp(){return c_maxHp;}
 float Monster::returnDmg(){return c_dmg;}
 float Monster::returnArmor(){return c_armor;}
 float Monster::returnEndur(){return c_endur;}
 float Monster::returnEvasion(){return c_evade;}
 float Monster::returnAgility(){return c_agility;}
主目录中不存在名称。它只存在于generateMonster函数中。要生成一个可以在main中使用的怪物,只需从函数中返回它。将return类型更改为Monster,并添加return语句

Monster generateMonster()
{
    ... Everything your function is currently doing ...

    // plus this
    return name;
}
然后,大体上,您可以这样做:

Monster m = generateMonster();

阅读有关作用域的知识,以及C++中的范围规则。我知道,我如何解决当前的情况,调整范围,也包括MIN,你应该先学习一些基本的C++,然后尝试一个更小的问题。并将返回函数标记为const float returnHp const;我告诉你学习基础C++,因为如果你不了解范围,你很可能不知道其他基本概念,明天你会回到这里问一些琐碎的问题。但如果你喜欢一次只学一个问题,那是你的选择。这将需要很长的时间……当然,使用m代替name,或者使用Monster name=generateMonster;尽量减少代码中所需的更改。@GingerPlusPlus:是的,我避免使用相同的名称,以明确main中对象的名称不必与要返回的对象的名称相同。谢谢,这也教会了我其他一些东西。
Monster m = generateMonster();