![](/img/trans.png)
[英]How to print out actual object value instead of memory address in gdb?
[英]Vector and Iterators, print out value instead of memory address
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;
}
大家好,所以我做了一个名为Monster的类,它有一个构造函数,允许2个变量,一个字符串和int(怪物名称和怪物健康),现在我想创建5个不同名称和生命的怪物,我把它们在一个向量中并存储它,但是现在我想使用迭代器来尝试获取我存储在该Vector中的所有信息,但是我获得了它的内存地址,我已经使用了“* iter”作为解除引用程序,我做错了什么? 很抱歉提到我在Monster class getname和gethealth中也有2个函数。 返回健康和名称;
由于您将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;
}
}
很少有其他好的做法:
总是在迭代器上预先递增
结束检查容器iter != Monsters.end()
,它在各种迭代器中都有效。
尝试
cout << (*iter) ->getname;
cout << (*iter) ->gethealth;
或者您可以在Monster类中重载'<<'运算符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.