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