2010-02-26 79 views
0

我想静态分配数组。看看下面的代码,这个代码是不正确的,但它会给你一个想法是什么我想要做的静态数组分配问题!

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

齐亚,你需要缩进你的代码。这是很难读取它的。 – 2010-02-26 21:55:28

+0

您还没有提问。请提出我们可能会尝试回答的问题。 – abelenky 2010-02-26 21:57:10

+0

难道你想要一个具有固定编译时间大小的类?在这种情况下,模板是您正在寻找的关键字。 – 2010-02-26 21:57:27

回答

2

如果您的数组大小始终相同,请将其设为静态成员。整体类型的静态成员可以直接在类定义中初始化,如下所示:

class array 
{ 
    static const int arraysize = 10; 
    int array[arraysize]; 

    public: 
    array(); 
}; 

这应该按照您的方式工作。如果数组的大小对于数组类型的每个对象并不总是相同的,那么您不能这样做,您需要使用模板参数,动态分配数组或使用STL容器类(例如std::vector)。

0

C++不允许变长数组(即那些其大小不编译时间常数)。允许结构体中的一个会使得不可能计算sizeof(array),因为大小可能因实例不同而不同。

请考虑使用std :: vector来代替,如果只在运行时才知道大小。这也避免了将数组大小存储在单独的变量中。注意,从堆中分配(例如通过std :: vector)也允许更大的数组,因为可用的堆栈空间非常有限。

如果你想让它成为一个编译时常量,就需要一个模板参数。那么你应该寻找已经实现它的Boost.Array。

0

数组大小必须是编译时间常量。你几乎在那里,你只需要初始化const,并使其成为static。或者,使用动态数组或矢量。

2

它必须使用模板参数完成,否则sizeof(array)对于每个对象都会有所不同。

这是你如何使用模板参数。

template <int N> 
class array 
{ 
    int data[N]; 

    // ... 
}; 

或者,如果您不介意动态分配,则可以使用std::vector

0

编辑:注意这个答案:这很可能是错误的方式来做到这一点为你的情况。但是,如果你真的需要的是一个数组(而不是向量或其他),你真的需要用它来进行动态分配,请执行下列操作:

class array 
{ 
    int *p_array; 

    public: 
    array(int size); 
}; 

array::array(int size) 
{ 
p_array = malloc(size * sizeof(int)); 
} 

只要确保你清理(​​IE免费p_array在你的descructor)