我正在尝试访问一个对象的getter方法,该方法存储在一个没有运气的向量中。编译时没有错误,但是当我尝试访问getter时程序崩溃。
我的对象是一个名为Item
的类,我使用指向Item
的指针初始化向量。
vector<Item*> bag = vector<Item*>(someSize);
当我尝试访问此std::cout << bag[0]->getID() << std::endl;
只有当它在矢量中而不在外面时才会发生。
答案 0 :(得分:1)
此代码可以使用:
#include <iostream>
#include <vector>
class Item {
int ID;
public:
int getID() const {return ID;}
void setID(int myid){ID = myid;}
};
int main(){
Item *i1 = new Item;
i1->setID(5);
std::vector<Item*> bag;
//std::vector<Item*> bag(20);
bag.push_back(i1);
std::cout << bag[0]->getID() << std::endl;
delete i1;
return 0;
}
(请注意bag
以空向量开头。)
但是如果我将矢量定义替换为注释掉的下面的行,代码将会中断,因为push_back
会添加到矢量的 end 。在push_back
操作之后,大小为20的向量将以21个元素结束,并且通过push_back
添加的元素位于向量的末尾,而不是开头。
答案 1 :(得分:0)
您需要在某处实际创建对象。如果Item()
很简单,您可以执行以下操作:
for(auto& item : bag)
{
item = new Item();
}
然后你可以调用成员函数。