0

我正在尝试在 Creature 类中制作一组武器,并且所有生物都共享相同的对象(武器)数组。所以我试着这样做......但我不知道如何解决这个问题......请尝试在初学者级别向我解释,如果你可以请提供一些链接以阅读有关正确使用“静态”的信息!

#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;
}
4

2 回答 2

0

首先,您不应该使用类 C 数组。使用 STL 容器,例如std::array(fixed size, compiler-time know, sequence) 或std::vector(variable-size sequence)。这将使您的喜欢更容易。

其次,如果您想与所有生物共享 arm 数组的同一个实例,您可以将其设为静态。

// 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;
于 2013-11-11T13:19:45.927 回答
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 数组副本。为了解决这个问题,你声明数组是静态的。既然你这样做了,你就不能再有一个指针数组了,因为指针可以包含内存地址,你需要指向内存中的相同位置:静态 Arms 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 对象,它们将共享同一个数组并看到所有元素的相同值。

于 2013-11-11T16:17:39.060 回答