无法从向量访问对象的getter

时间:2014-10-08 01:32:42

标签: c++ vector

我正在尝试访问一个对象的getter方法,该方法存储在一个没有运气的向量中。编译时没有错误,但是当我尝试访问getter时程序崩溃。

我的对象是一个名为Item的类,我使用指向Item的指针初始化向量。

vector<Item*> bag = vector<Item*>(someSize);

当我尝试访问此std::cout << bag[0]->getID() << std::endl;

之类的getter时,程序失败

只有当它在矢量中而不在外面时才会发生。

2 个答案:

答案 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();
}

然后你可以调用成员函数。