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;
}
}
}