类c ++中的静态对象数组

时间:2013-11-11 13:12:37

标签: c++

我正在尝试在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;
}

2 个答案:

答案 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对象,它们将共享相同的数组并查看所有元素的相同值。