如何在C ++中存储和添加引用向量的链接?

时间:2016-07-26 10:49:30

标签: c++ vector iterator

我有一种情况,我有一个Class1对象和一个Class2对象的向量。我的目标是让Class1的对象包含对Class2向量中某些对象的引用。 Class1包含成员:​​

std::vector<Class2&> links;

void addLink(Class2 &obj)
{
  links.push_back(obj)
}

然后我想迭代Class2的对象,对于满足某个条件的任何对象,我想添加一个这样的链接:

for (std::vector<Class2&>::iterator i = vector2.begin(); i != vector2.end(); ++i)
{
  if (condition_satisfied(*i))
  {
    obj1.addLink(*i)
  }
}

然而,这样做会给我C2528的编译时错误:指向引用的指针是非法的。我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

std::vector<T>要求{C} 98中TCopyAssignable,C ++ 11中为Eraseable,但普通参考不是。换句话说,引用不能存储在std::vector

您可能希望使用普通指针。或std::reference_wrapper<T>,这是伪装的指针。