Sono abbastanza nuovo a C++ con Boost.puntatori a una classe in multi_array boost allocata dinamicamente, non compilando
Desidero che un oggetto del "mondo" di classe abbia un array denominato "chunk" di tipo "octreenode". Precedentemente avevo un ordinario array monodimensionale, e questo ha funzionato bene. Ora sto cercando di passare all'utilizzo di un array 3D con la funzionalità multi_array di Boost e non sono sicuro di cosa sto facendo male.
codice semplificato:
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);
}
}
}
}
};
Dopo di che, se tento di eseguire l'assegnazione
root->planet[0]->chunk[0][0][0]->material = 4;
ottengo l'errore:
error: base operand of '->' has non-pointer type 'boost::detail::multi_array::sub_array<octreenode, 1u>'|
"octreenode" ha il costruttore in questione, e questa linea ha funzionato in sintassi identica quando era giusta:
root->planet[0]->chunk[0]->material = 4;
(con una matrice unidimensionale). Analogamente, mentre compilato bene con una matrice unidimensionale, cercando di passare il pezzo di funzioni che prevedono un puntatore a un oggetto "octreenode", come ad esempio:
compactoctree(root->planet[p]->chunk[cz][cx][cy], 0, 14);
genera l'errore
error: cannot convert 'boost::detail::multi_array::sub_array<octreenode, 1u>' to 'octreenode*' for argument '1' to 'short int compactoctree(octreenode*, int, int)'|
Sarei molto grato per qualsiasi suggerimento, sono sicuro che mi manca qualcosa di ovvio.
(suggerimento di dereferenziazione "chunk" appositamente venuto da https: // gruppi .google.com/forum /? fromgroups = #! topic/boost-list/IWKIdlrg4dU) – Riot