我是很新的C ++与提升。
我想通过这门课的“世界”的目的是有一个名为类型“octreenode”的“块”的数组。 以前我有一个普通的一维数组,这工作得很好。 现在,我想移动到使用3D阵列与Boost的multi_array的功能,我真的不知道我在做什么错。
简化的代码:
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(根 - >行星[P] - >块[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)'|
会很感激的任何建议,我敢肯定,我失去了一些东西明显。