1

警告#12367 when running Build | Build Solution for Intel Static Analysisが表示されますが、コードの問題がわかりません。アイデアはありますか?

警告 #12367: 呼び出し "std::_Vector_iterator > > std::vector >::erase(std::_Vector_const_iterator > >)" で実引数 2 として渡されたオブジェクトのスライスは、暗黙的な型変換が原因で発生します

 pragma warning(suppress: 4995)
    #include <vector>

    class __declspec(dllexport) MxPluginLib //nothing special here, not derived class etc
    {
    public:
      // ...
    private:
     //  ... nothing special here

    };


    class __declspec(dllexport) MxPluginManager 
    {
    public:
       //...
    private:
    #pragma warning(suppress: 4251)
        std::vector<MxPluginLib *> _Libs;

    };

    bool MxPluginManager::DeleteNextUnselected()
    {
        bool erased = false;
        size_t cnt = _Libs.size();
        if (cnt > 0 )
        {
            for (size_t x = 0; x < cnt; x++)
            {
                if (_Libs[x]->GetSelection() == false)
                {
                    delete  _Libs[x];
                    _Libs[x] = '\0';
                    _Libs.erase(_Libs.begin()+x);  //THIS IS WHERE THE WARNING IS GENERATED
                    erased = true;
                    break;
                }
            }
        }
        return erased;
    }
4

2 に答える 2

0

私の見解では、唯一の奇妙な行は

_Libs[x] = '\0';

ポインターではなく文字を格納しているとアナライザーに思わせる可能性があります。とにかく要素を消去しているので、実際には必要ありません。削除して、問題が解決するかどうかを確認してください。

于 2012-11-22T14:02:02.190 に答える
0

この行

_Libs.erase(_Libs.begin()+x);

vector::iteratorを期待する関数に aを渡していvector::const_iteratorます。これは問題なく、機能する必要があります (ただし、標準では、それがどのようiteratorに機能するかについて正確には述べられていませんconst_iterator

iteratorあなたの実装では、から派生したように見えconst_iterator、パラメーターを渡すと、派生部分を「スライス」して基本クラスに変換します。

この場合、これはエラーではなく、警告は無視できます。

于 2012-11-22T16:32:13.260 に答える