6

MSVS 2010 SP1 で正常に動作するプロジェクトがあります。MSVS 2012 RC に変換しようとしています。主にC++ヘッダー/ライブラリパスとMFCカスタムに関連するものをいくつか変更する必要がありました。しかし、クリアしなければならない最後のハードルが 1 つあります。

unordered_map<basic_string<TCHAR>, int>MSVC 2010 では、 orをたくさん使用していmap<basic_string<TCHAR>, int>ます。それはうまくコンパイルされます。しかし、MSVS 2012 では、「C++ 標準はこの型のハッシュを提供していません」というエラーが表示されます。

ネットで少し調べたところ、MSVS 2012 は C++11 標準にもっと近いはずであり、標準では基本型と 4 つの定義済み文字列型のハッシュ関数しか定義されていないことがわかりました (その中にはstringwstringが含まれていますがbasic_string、含まれていません)。 )。だから私はすべてbasic_string<TCHAR>wstring無駄に変更しました...それでも同じエラーが発生します。

アプリを再度コンパイルできるようにするにはどうすればよいですか?

4

1 に答える 1

8

どうやら OOEngineerはヘッダーbasic_stringを含めずに使用されたようです。<string>とにかく、他のヘッダーによる間接的なインクルードを通じて、機能の一部が表示される場合があります。

VS2010 がリリースされたとき、当時提案された標準はすべてのstd::hash<>特殊化を<functional>ヘッダーに入れました。最終的な C++11 標準では、これらをそれぞれのコンテナーにまとめた方がよいと判断されたため、一部のhash<>特殊化は 、 などに移動されまし<string><vector>

そのため、 のすべての (または実際にはすべての) 機能を使用するには、ヘッダーを自分でstd::stringインクルードする必要があり、<string>別のシステム ヘッダーに依存しないようにする必要があります。

于 2012-06-22T13:21:38.533 に答える