2017-03-17 10 views
5

GoogleのGTestフレームワークのいくつかのバージョンを使用するC++コードがあります。 Visual Studioの2015年と罰金コンパイルするために使用このコード私はVS2017にアップグレードし、そして今、私はこのようなエラーの束を得る:std :: tr1 with visual studio 2017

error C2039: 'tr1': is not a member of 'std' 
error C3083: 'tr1': the symbol to the left of a '::' must be a type 

はVS2017でのstd :: TR1を使用するために必要ないくつかのコンパイラオプションですか?

答えて

6

1つのオプションは、TR1を再度有効にすることです。 this blog articleで簡単に説明したように、マクロ_HAS_TR1_NAMESPACEを定義してください。 MSBuildプロジェクトを使用している場合は、プロジェクトのPreprocessor Definitions設定を使用するのが最適です。またはプリコンパイル済みヘッダーを使用している場合は、そのPCHの先頭に定義してください。

より良いオプションは、GTestヘッダーを含める前にGTEST_LANG_CXX11から1のマクロを定義することによって、コンパイラがC++ 11をサポートしていることをGTestに通知することです。 std::tr1::tuple *ではなくstd::tupleを使用します。 (GTest's C++11-detection logic__cplusplus -orientedですが、VC++はほとんどがC++ 11とC++ 14にもかかわらず更新されていません。これはGTestのバグだと言えます)。

*その他のC++ 11の機能については言及していませんが、これがはるかに優れたオプションです -

+0

ありがとう。私は_HAS_TR1_NAMESPACEオプションを選択していました。 – Dess

関連する問題