Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法从向量中的对象访问getter_C++_Vector - Fatal编程技术网

C++ 无法从向量中的对象访问getter

C++ 无法从向量中的对象访问getter,c++,vector,C++,Vector,我试图访问一个对象的getter方法,该方法存储在一个向量中,没有运气。编译时没有错误,但当我尝试访问getter时程序崩溃 我的对象是一个名为Item的类,我使用指向Item的指针初始化向量 vector bag=vector(某种尺寸) 当我尝试访问getter时,程序失败,如下所示std::cout getID()此代码将起作用: #include <iostream> #include <vector> class Item { int ID; publ

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

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

vector bag=vector(某种尺寸)

当我尝试访问getter时,程序失败,如下所示
std::cout getID()此代码将起作用:

#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;
}
#包括
#包括
类项目{
int-ID;
公众:
int getID()常量{return ID;}
void setID(int myid){ID=myid;}
};
int main(){
项目*i1=新项目;
i1->setID(5);
病媒袋;
//病媒袋(20);
袋子。推回(i1);

std::cout getID()您需要在某处实际创建对象。如果
Item()
很简单,您可以执行以下操作:

for(auto& item : bag)
{
    item = new Item();
}

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

bag
将包含初始化为0的
某些大小的
元素,即无效指针。存储指针而不是对象是否有充分的理由?存储对象会简单得多,因为向量将为您创建和销毁它们。因为我不想初始化对象同样的类型,Mike,中间的情况如何,使用指针而不是向量?你能给我们一个吗?是的,push_back添加到向量的末尾。所以如果你在创建向量时声明一个大小,然后使用push_back,element
[0]
仍然没有有效的指针。getID可以是常量函数。向后推局部变量的地址是危险的。如果向量被复制到或存在于更大的范围内,您将得到UB。