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