如何将非静态const数组声明为类的属性?
以下代码产生编译错误
'Test :: x':无法初始化成员
class Test
{
public:
const int x[10];
public:
Test()
{
}
};
答案 0 :(得分:3)
您应该阅读this already posted question。由于无法执行您想要的操作,因此解决方法是使用std :: vector。
答案 1 :(得分:1)
您可以使用tr1中的array
类。
class Test
{
public:
const array<int, 10> x;
public:
Test(array<int,10> val) : x(val) // the only place to initialize x since it is const
{
}
};
array
类可以简单地表示如下:
template<typename T, int S>
class array
{
T ar[S];
public:
// constructors and operators
};
答案 2 :(得分:0)
使用boost::array(与tr1相同),它将如下所示:
#include<boost/array.hpp>
class Test
{
public:
Test():constArray(staticConst) {};
Test( boost::array<int,4> const& copyThisArray):constArray(copyThisArray) {};
static const boost::array<int,4> staticConst;
const boost::array<int,4> constArray;
};
const boost::array<int,4> Test::staticConst = { { 1, 2, 3 ,5 } };
需要额外的代码静态成员,因为{ { 1, 2, 3 ,5 } }
在初始化列表中无效。
一些优点是boost :: array定义了迭代器和标准容器方法,如size,begin和end。