मैं काम करने के लिए एक साधारण सा कोड प्राप्त करने की कोशिश कर रहा हूं। मेरे पास 'get_object_radius' नामक एक फ़ंक्शन है जो 'प्राणी' के उदाहरणों के लिए एक क्षेत्र की खोज करता है, और उनके पॉइंटर्स को वेक्टर पर धक्का देता है, फिर वेक्टर देता है।

मैं फिर उन सभी के माध्यम से साइकिल चलाना चाहता हूं और समारोह के बाहर से उनके नाम प्रदर्शित करना चाहता हूं। मुझे पूरा यकीन है कि मैं उन्हें वेक्टर में सही तरीके से जोड़ रहा हूं, लेकिन मैं पॉइंटर्स के वेक्टर के माध्यम से सही ढंग से साइकिल नहीं चला रहा हूं, है ना?

यहां प्रासंगिक कोड स्निपेट है (जो काम नहीं करता है):

//'get_object_radius' returns a vector of all 'Creatures' within a radius
vector<Creature*> region = get_object_radius(xpos,ypos,radius);

//I want to go through the retrieved vector and displays all the 'Creature' names
for (vector<Creature*>::iterator i = region.begin(); i != region.end(); ++i) {
    cout<< region[i]->name << endl;
}

कोई विचार मैं क्या गलत कर रहा हूँ?

1
Matthew 11 फरवरी 2012, 07:26

2 जवाब

प्रयत्न:

//I want to go through the retrieved vector and displays all the 'Creature' names
for (vector<Creature*>::iterator i = region.begin(); i != region.end(); ++i) {
    cout << (*i)->name << endl;
}

आपको इटरेटर (* ऑपरेटर का उपयोग करके) को डीरेफरेंस करने की आवश्यकता है, जो तब आपको Creature* पॉइंटर देता है।

1
Charles Salvia 11 फरवरी 2012, 07:31

तत्व इटरेटर इंगित करने के लिए, आप इसे संदर्भित करते हैं (एक सूचक की तरह, लेकिन इटरेटर आवश्यक रूप से पॉइंटर्स नहीं होते हैं)। तो आपका कोड इस तरह दिखना चाहिए:

// auto is C++11 feature
for (auto it = region.begin(); it != region.end(); ++it) {
    Creature *p = *it;
    std::cout << p->name << "\n";
}

सी ++ 11 में आपको रेंज भी मिलती है, जो आपके विचार से इटरेटर को छुपाती है:

for (Creature *p : region) {
    std::cout << p->name << "\n";
}
0
Cat Plus Plus 11 फरवरी 2012, 07:38