我想静态分配数组。看下面的代码,这段代码不正确,但它会让你知道我想做什么
class array
{
const int arraysize;
int array[arraysize];//i want to statically allocate the array as we can do it by non type parameters of templates
public:
array();
};
array::array():arraysize(10)
{
for(int i=0;i<10;i++)
array[i]=i;
}
main()
{
array object;
}
答案 0 :(得分:2)
必须使用模板参数完成,否则sizeof(array)
对每个对象都不同。
这是使用模板参数的方法。
template <int N>
class array
{
int data[N];
// ...
};
或者,如果您不介意动态分配,则可以使用std::vector
。
答案 1 :(得分:2)
如果您的数组大小始终相同,请将其设为静态成员。作为整数类型的静态成员可以直接在类定义中初始化,如下所示:
class array
{
static const int arraysize = 10;
int array[arraysize];
public:
array();
};
这应该按照你想要的方式工作。如果对于类型数组的每个对象,arraysize并不总是相同,那么您不能这样做,并且您将需要使用模板参数,动态分配数组或使用STL容器类(例如std::vector
)。
答案 2 :(得分:0)
C ++不允许使用可变长度数组(即大小不是编译时常量的数组)。在结构中允许一个将使得无法计算sizeof(数组),因为大小可能因实例而异。
如果只在运行时知道大小,请考虑使用std :: vector。这也避免了将数组大小存储在单独的变量中。请注意,从堆分配(例如通过std :: vector)也允许更大的数组,因为可用的堆栈空间非常有限。
如果您希望它是编译时常量,请使用模板参数。那么你应该寻找已经实现它的Boost.Array。
答案 3 :(得分:0)
数组大小必须是编译时常量。您几乎就在那里,您只需要初始化const
并将其设为static
。或者,使用动态数组或向量。
答案 4 :(得分:0)
编辑:请注意这个答案:这很可能是针对您的情况做错的方法。但是如果你 真的 需要它是一个数组(不是矢量或其他),你 真的 需要它要动态分配,请执行以下操作:
class array
{
int *p_array;
public:
array(int size);
};
array::array(int size)
{
p_array = malloc(size * sizeof(int));
}
请确保清理(在descructor中使用IE免费的p_array)