संकलित नहीं करते हैं, मैं बूस्ट के साथ सी ++ में काफी नया हूं।डायनेमिकली आवंटित बूस्ट मल्टी_एरे में कक्षा में पॉइंटर्स,
मुझे कक्षा "दुनिया" का एक उद्देश्य "ऑक्टीरोडोड" प्रकार के "खंड" नामक एक सरणी चाहिए। पहले मेरे पास एक सामान्य आयामी सरणी थी, और यह ठीक काम करता था। अब मैं बूस्ट की मल्टी_एरे कार्यक्षमता के साथ एक 3 डी सरणी का उपयोग करने की कोशिश कर रहा हूं, और मुझे सच में यकीन नहीं है कि मैं क्या गलत कर रहा हूं।
सरलीकृत कोड:
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);
}
}
}
}
};
इसके बाद अगर मैं काम
root->planet[0]->chunk[0][0][0]->material = 4;
मैं त्रुटि मिलती है करने का प्रयास:
error: base operand of '->' has non-pointer type 'boost::detail::multi_array::sub_array<octreenode, 1u>'|
"octreenode" प्रासंगिक निर्माता है, और यह लाइन समान वाक्यविन्यास में काम करती थी जब यह केवल था:
root->planet[0]->chunk[0]->material = 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)'|
उत्पन्न करता है
किसी भी सुझाव के लिए बहुत आभारी होंगे, मुझे यकीन है कि मुझे कुछ स्पष्ट याद आ रहा है।
(अपसंदर्भन "हिस्सा" के सुझाव विशेष रूप से https से आया है के निर्माण के लिए निर्माता प्रारंभ सूची का उपयोग कर सकते हैं: // समूहों .google.com/forum/?ggroups = #! विषय/बूस्ट-सूची/IWKIdlrg4dU) – Riot