假设我有Object o
一个包含定义为的向量:
std::vector<V *> V;
我有一个吸气剂:
inline std::vector<V *>& getV() { return V; };
如果我通过引用传递参数:
void A::function(Object& o)
并尝试访问std::vector V
;
我该怎么做?
void A::function(Object& _o)
{
for (int f=0; f < _o.getV().size(); f++)
{
V* _v = _o.getV().at(f);
std::string s = _v->getName().c_str();
std::cout << "V: " << _v->getName().at(f) << std::endl;
std::cout << "V: " << s << std::endl;
}
}
}
_v->getName()
如果我在尝试访问上述内容时崩溃了,我会犯什么错误。
如果我查看崩溃,我确实看到 _v 已填补职位:
V std::__1::vector<V *, std::__1::allocator<V *> > size=8
[0] V * 0xbfffd658 0xbfffd658
[1] V * 0xbfffd658 0xbfffd658
[2] V * 0xbfffd658 0xbfffd658
[3] V * 0xbfffd658 0xbfffd658
[4] V * 0xbfffd658 0xbfffd658
[5] V * 0xbfffd658 0xbfffd658
[6] V * 0xbfffd658 0xbfffd658
[7] V * 0xbfffd658 0xbfffd658
更新:所以看起来以前的开发者曾经做过这样的事情
在一个.h
Object* o1;
在.a cpp
void B::function(Object& _o)
{
o1 = &_o;
.... does stuff with o1 .....
}
在另一个 .cpp 中传入原始object o
文件以对其进行处理:
void A::function(Object& _o)
{
for (int f=0; f < _o.getV().size(); f++)
{
V* _v = _o.getV().at(f);
std::string s = _v->getName().c_str();
std::cout << "V: " << _v->getName().at(f) << std::endl;
std::cout << "V: " << s << std::endl;
}
}
}