3

我有一个类定义为:

class Obj {
public:
    int width, height;
    Obj(int w, int h);
}

我需要它包含一个像这样的静态数组:

int presc[width][height];

但是,我无法在类中定义,因此可以创建指向 2D 数组的指针(出于好奇,还可以创建 3、4 和 5D 数组),将其作为类的成员,并将其初始化为构造函数如:

int ar[5][6];
Obj o(5, 6, &ar);

编辑:这里的想法是每个对象都有不同的宽度和高度,所以我用来表示该对象的数组对于该对象将是唯一的,但是一旦定义了该数组(最好在构造函数中),它就不会改变. 并且特定对象的宽度和高度值在编译时是已知的。

编辑:数组用于碰撞检测,方法是将presc两个对象的数组叠加到一个大数组上,并查看重叠的位置,声明如下:

Obj player1(32, 32); //player with a width of 32 px and height of 32 px, presc[32][32]
Obj boss(500, 500); //boss with a width of 500 px and height of 500 px, presc[500][500]
4

3 回答 3

4

不,类的大小需要在编译时知道。

如果您在运行时才知道数组的大小,则不能将该数组作为类成员(您需要动态分配数组并将指向它的指针存储在类中,或者最好使用一std::vector)。

于 2010-04-02T23:11:56.360 回答
2

如果“动态”是指“堆分配”,那么不,当前的 Obj 无法做到这一点。OTOH,如果您知道w并且h在编译时:

template <int W, int H>
class Obj {
public:
    // ...
private:
    int presc[W][H];
}
于 2010-04-02T23:11:00.550 回答
0

boost::array并且std::tr1::array两者都提供恒定大小的数组。理解这些创造了全新的类型;不使用动态数组可能会使你的很多代码比它需要的更难编写。您必须参数化您的类,以及在这些对象上工作的任何函数。您将节省的只是单个堆分配。

于 2010-04-03T07:53:01.813 回答