初始化 Boost.MultiArray 在结构中定义时
Initialise Boost.MultiArray when defined inside struct?
假设我有一个这样的结构:
struct someDataType
{
boost::multi_array<int,3> data;
};
然后如何初始化数组?我已经尝试过了,但它似乎不起作用:
someDataType container;
container.data=boost::multi_array<int,3>(boost::extents[5][5][5]);
程序在运行时使用该代码崩溃;当编译为调试时,它会从 Boost 代码中的某个位置抛出一个assertion failed
。
任何帮助将不胜感激:)
编辑:我刚刚意识到我写错了那段代码。我的意思是,我在程序中是正确的,但是当我将其复制到SO时,我概括了它并犯了一个错误。现已修复。
首先,您对 someDataType 的声明仅指定您的multi_array有多少维,而不是范围。
在处理 container.data 之前,您必须设置范围,以便 Boost 可以为它分配内存。最简单的方法是使用"调整大小":
container.data.resize(boost::extents[5][5][5]);
您还可以将构造函数添加到 someDataType 并在那里设置范围:
someDataType::someDataType(): data(boost::extents[5][5][5]){}
至于程序崩溃,似乎你粘贴了错误的东西,它会失败编译。如果省略第二个"数据",代码段将编译但崩溃。原因是此类分配不符合多数组文档中指定的"前提条件":源的形状和目标的形状应该相同。但是,左侧具有形状[0][0][0],而右侧具有范围[5][5][5]
您可以使用聚合初始化:
someDataType container = { boost::multi_array<int,3>(boost::extents[5][5][5]) };
或提供默认构造函数
struct someDataType
{
boost::multi_array<int,3> data;
someDataType() : data(boost::extents[5][5][5]) {}
};
someDataType container;
或者,为了使您的代码几乎按编写的方式工作,您可以使用 resize :
struct someDataType
{
boost::multi_array<int,3> data;
};
someDataType container;
container.data.resize(boost::extents[5][5][5]);
相关文章:
- 在类构造函数中定义结构变量的参数
- C++ 通过函数传递自定义结构
- 在C++中循环访问自定义结构列表的小问题
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 如何在C++中的.h文件中的类中定义结构
- 如何定义C结构:C-linkage和udt
- 结构向量中自定义结构函数的内存使用
- 类型转换自定义结构
- 使用结构绑定更改自定义结构的值
- 信号槽自定义结构问题
- 如何将unordered_set与自定义结构一起使用?
- 定义结构中没有默认构造函数的类
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 从自定义结构数组中提取数据
- 无法使用自定义结构的属性
- 通过引用将自定义结构的向量传递给 boost::compute 闭包或函数
- 如何从输入中定义的"external" int 定义结构中的数组大小
- 定义结构数组
- 在Cython中定义C 结构返回类型