我对使用 Boost 的 C++ 很陌生。
我想要一个“world”类的对象有一个名为“chunk”的“octreenode”类型的数组。以前我有一个普通的一维数组,这很好用。现在我正在尝试使用具有 Boost 的 multi_array 功能的 3D 数组,但我真的不确定自己做错了什么。
简化代码:
class world {
public:
typedef boost::multi_array<octreenode, 3> planetchunkarray; // a boost_multi for chunks
typedef planetchunkarray::index index;
planetchunkarray *chunk;
world(double x,double y,double z,
int widtheast, int widthnorth, int height) :
originx(x), originy(y), originz(z),
chunkseast(widtheast), chunksnorth(widthnorth), chunksup(height) {
chunk = new planetchunkarray(boost::extents[chunksnorth][chunkseast][chunksup]);
planetchunkarray::extent_gen extents;
for (int cz = 0; cz < chunksnorth; ++cz) {
for (int cx = 0; cx < chunkseast; ++cx) {
for (int cy = 0; cy < chunksup; ++cy) {
(*chunk)[cz][cx][cy] = new octreenode(1,72);
}
}
}
}
};
之后,如果我尝试分配
根->行星[0]->块[0][0][0]->材料= 4;
我得到错误:
error: base operand of '->' has non-pointer type 'boost::detail::multi_array::sub_array<octreenode, 1u>'|
“octreenode”具有相关的构造函数,并且这一行的语法与之前相同:
根->行星[0]->块[0]->材料=4;
(使用一维数组)。同样,虽然它使用一维数组编译得很好,但试图将块传递给期望指向“octreenode”对象的指针的函数,例如:
compactoctree(root->planet[p]->chunk[cz][cx][cy], 0, 14);
产生错误
error: cannot convert 'boost::detail::multi_array::sub_array<octreenode, 1u>' to 'octreenode*' for argument '1' to 'short int compactoctree(octreenode*, int, int)'|
非常感谢您的任何建议,我确定我遗漏了一些明显的东西。