我正在尝试在Creature类中创建一个数组,并且所有生物共享相同的对象数组(手臂)。 所以我试着这样做......但我不知道如何修复这个问题...请尝试在初学者级别解释我,如果你能提供一些链接,请阅读有关使用&#的信息34;静态"正确!
#include<iostream>
namespace
{
int x = 5;
}
class Arms
{
public:
int arms = 45;
};
class Creature
{
public : int health;
int mana;
int dmg;
Arms *b[188];
Creature(int);
};
Creature::Creature(int z )
{
for(int i = 0 ;i< z; i++)
{
b[i] = new Arms; //<---this is my problem
b[i]->arms = z; // <-- this is my problem
}
}
int main()
{
Creature c1(12);
return 0;
}
答案 0 :(得分:1)
首先,你不应该使用类似C的数组。使用STL容器,例如std::array
(固定大小,编译时知道,序列)或std::vector
(可变大小序列)。这会让你更容易。
其次,如果你想与所有生物共享武器阵列的相同实例,你可以确保它是静态的。
// in the header
class Creature
{
public :
int health;
int mana;
int dmg;
static std::vector<Arms> arms;
Creature(int);
};
// in the .cpp file
std::vector<Arms> Creature::arms;
答案 1 :(得分:0)
我不确定您要实现的目标,但我可以看到您的代码存在一些问题:
class Arms
{
public:
int arms = 45; // this is pointless since only const members can be initialized within a class; in case you want this to be the default value you should write your own default constructor.
};
据我所知,其余的代码可以编译,并且它会将数组b的z元素初始化为z的值。 但是如果你声明一个新的Creatures对象,那么新对象将拥有它自己的b数组副本。要解决此问题,请将数组声明为static。而且由于你正在这样做,你不能再拥有一个指针数组,因为指针可以包含内存地址,你需要指向内存中的相同位置: 静态武器b [188];
完整代码现在看起来像这样:
class Creature
{
public : int health;
int mana;
int dmg;
static Arms b[188]; // this is only a declaration
Creature(int);
};
Arms Creature::b[188];// you have to define this outside the class or you'll get a linker error.
Creature::Creature(int z )
{
for(int i = 0 ;i< z; i++)
{
b[i].arms = z;
}
}
现在,如果您有一个或多个Creature对象,它们将共享相同的数组并查看所有元素的相同值。