0

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

1 に答える 1