Ich bin ziemlich neu in C++ mit Boost.Zeiger auf eine Klasse in dynamisch zugewiesenen Boost multi_array, nicht kompilieren
Ich möchte ein Objekt der Klasse "Welt" ein Array namens "Chunk" vom Typ "octreenode" haben. Zuvor hatte ich ein gewöhnliches eindimensionales Array, und das funktionierte gut. Jetzt versuche ich, ein 3D-Array mit Boosts multi_array-Funktionalität zu verwenden, und ich bin mir wirklich nicht sicher, was ich falsch mache.
Vereinfachte Code:
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);
}
}
}
}
};
Nach dem, wenn ich den Auftrag
root->planet[0]->chunk[0][0][0]->material = 4;
ich den Fehler zu machen versuchen:
error: base operand of '->' has non-pointer type 'boost::detail::multi_array::sub_array<octreenode, 1u>'|
"octreenode" hat den entsprechenden Konstruktor, und diese Zeile funktionierte in identischer Syntax, als es gerade war:
root->planet[0]->chunk[0]->material = 4;
(mit einem eindimensionalen Array). In ähnlicher Weise, während sie mit einem eindimensionalen Array fein kompilierten und versuchen, die Chunk-Funktionen zu übergeben, einen Zeiger auf ein „octreenode“ Objekt erwarten, wie zum Beispiel:
compactoctree(root->planet[p]->chunk[cz][cx][cy], 0, 14);
erzeugt die Fehler
error: cannot convert 'boost::detail::multi_array::sub_array<octreenode, 1u>' to 'octreenode*' for argument '1' to 'short int compactoctree(octreenode*, int, int)'|
Wäre sehr dankbar für irgendwelche Vorschläge, ich bin sicher, ich vermisse etwas offensichtlich.
(der Vorschlag von dereferencing "Brocken", die speziell von https kam zu konstruieren: // Gruppen .google.com/forum /? fromgroups = #! topic/boost-list/IWKIdlrg4dU) – Riot