我有一种情况,我有一个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的编译时错误:指向引用的指针是非法的。我在这里做错了什么?
答案 0 :(得分:4)
std::vector<T>
要求{C} 98中T
为CopyAssignable,C ++ 11中为Eraseable,但普通参考不是。换句话说,引用不能存储在std::vector
。
您可能希望使用普通指针。或std::reference_wrapper<T>
,这是伪装的指针。