C++ 将非静态常量数组声明为类成员

C++ 将非静态常量数组声明为类成员,c++,arrays,class,static,constants,C++,Arrays,Class,Static,Constants,如何将非静态常量数组声明为类的属性 下面的代码产生编译错误 “测试::x”:无法初始化成员 你应该读书。由于不可能执行您想要的操作,因此解决方法是使用std::vector。您可以使用tr1中的数组类 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 co

如何将非静态常量数组声明为类的属性

下面的代码产生编译错误

“测试::x”:无法初始化成员


你应该读书。由于不可能执行您想要的操作,因此解决方法是使用std::vector。

您可以使用tr1中的
数组

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
 {
 }
};
使用(与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 } };
#包括
课堂测试
{   
公众:
Test():常量数组(staticConst){};
测试(boost::array const©ThisArray):constrarray(copyThisArray){};
静态常量boost::数组staticConst;
常量boost::数组常量数组;
};
常量boost::array Test::staticConst={{1,2,3,5};
需要额外的代码静态成员,因为
{{1,2,3,5}}
在初始化列表中无效


一些优点是boost::array定义了迭代器和标准容器方法,如size、begin和end。

Thaks for reply。但在阵列的情况下,这种解决方案是不可能的。当我们初始化数组时,将出现另一个编译错误(“无法为数组指定显式初始值设定项”)。我已编辑了回复。我把错误的问题联系起来了。请再看一次。
std::vector
不一样。它在堆上分配内存。我希望它在只读存储区域中初始化。使用std::vector可能吗?您不需要在只读区域中分配内存的动态分配对象。这是不可能的,只读区域中的内存需要在编译时初始化,但在编译时不知道要创建多少个对象。tr1中的数组也有迭代器和标准方法,如size/begin/end。不需要对一个简单的类使用boost。你说得对。但是我在任何tr1实现之前都使用boost,我需要存储一些编译时可用的配置数据。我希望将其放置在只读存储区域中。
template<typename T, int S>
class array
{
    T ar[S];
public:
    // constructors and operators
};
    #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 } };