2015-06-24 121 views
1
int main(){ 

    vector<Monster*> Monsters; 
    vector<Monster*>::iterator iter; 

    Monsters.push_back(new Monster("Slim", 100)); 
    Monsters.push_back(new Monster("Archer", 200)); 
    Monsters.push_back(new Monster("Solider", 300)); 
    Monsters.push_back(new Monster("Tank", 400)); 
    Monsters.push_back(new Monster("Skeleton",500)); 

    for (iter = Monsters.begin(); iter < Monsters.end(); iter++){ 
     cout << *iter << endl; 
    } 


    system("pause"); 
    return 0; 
} 

大家好,所以我做了一個叫怪物類,它有AA構造允許兩個變量,一個字符串和INT(怪物名稱,怪物血) ,現在我想創建5個具有不同名稱和健康的怪物,我把它們放在一個向量中並存儲它,但現在我想使用一個迭代器來獲取存儲在該向量中的所有信息,但是我得到它的內存地址,我已經使用了「* iter」作爲解引用程序,我做了什麼錯了?對不起,我不得不提到我也有2個功能在怪物類getname和gethealth。它返回健康和名字;Vector和迭代器,打印出值,而不是內存地址

回答

3

由於您將MOnster指針保持爲您的矢量類型,因此您可以使用以下synax cout << (*iter)->name << endl;來取消引用Monster類的元素。 示例如下所示:

class Monster{ 
    public: 
    std::string name; 
    int age; 
    Monster(string s, int k): name(s),age(k) 
    { 
    } 
}; 

int main(){ 

    vector<Monster*> Monsters; 
    vector<Monster*>::iterator iter; 

    Monsters.push_back(new Monster("Slim", 100)); 
    Monsters.push_back(new Monster("Archer", 200)); 
    Monsters.push_back(new Monster("Solider", 300)); 
    Monsters.push_back(new Monster("Tank", 400)); 
    Monsters.push_back(new Monster("Skeleton",500)); 

    for (iter = Monsters.begin(); iter != Monsters.end(); ++iter){ 
     cout << (*iter)->name << endl; 
    } 
} 

很少有其他好的做法:

  1. 總是做迭代

  2. 做容器,iter != Monsters.end()結束檢查前的增量,它是在所有有效種類的迭代器。

+0

OO我忘了括號超載 '< <' 操作,非常感謝你。在我試過* iter-> getName()之前,它不會編譯。但如果我將它更改爲(* iter) - > getName(),這將工作,再次感謝您的幫助。 – Ggbeastboi

0

嘗試

cout << (*iter) ->getname; 
cout << (*iter) ->gethealth; 

,或者你可以在你的怪物類

相關問題