-1

私は次の愚かなコードを使用しています:

std::vector<wxString> m_redoSteps;
...
m_redoSteps.clear();

Visual Studio 6 または GCC でコンパイルしている場合、m_redoSteps.clear() は正常に動作しますが、Visual Studio 2010 を使用すると、「ベクトル イテレーターに互換性がありません」というアサーションが表示されます (これにより、リリース ビルドでクラッシュが発生します)。

ここで何が間違っているのでしょうか?

--

編集:もう1行のコードを追加:

std::vector<wxString> m_redoSteps;
...
if (!m_redoSteps.empty())
{
   // do something in case it is not empty - which isn't in my case
   ...
}
m_redoSteps.clear(); // first call leads to the assertion...
4

1 に答える 1

3

Visual Studio 2010 sp1 をインストールします。次のバグ レポートを参照してください: http://connect.microsoft.com/VisualStudio/feedback/details/545013

更新 (2015 年 4 月 14 日):

バグの説明は545013 です。「vector::erase」制約は、デバッグ ビルドで互換性のない反復子を返します。

元のリンクhttp://connect.microsoft.com/VisualStudio/feedback/details/545013は利用できませんが、元のバグのキャッシュはhttp://web.archive.org/web/20140727031651/http:/にあります。 /connect.microsoft.com/VisualStudio/feedback/details/545013

このバグは、Visual Studio 2010 Service Pack 1 の説明で説明されているように、Visual Studio SP 1 で解決されました。

于 2012-11-26T10:05:29.873 に答える