2016-11-09 21 views
1

は、私はそれを使用のVisual Studio 2015で次の行は、Visual Studioでエラーなしでコンパイルされなければならない2013年エラーC2784、C2672とC2664は、2015

const std::basic_regex<wchar_t> e(_T("([eE][-+])(0)(\\d{2})")); 
io_string = std::regex_replace(io_string, e, _T("$1$3")); 

エラーは次のとおりです。

エラーC2664: 'STD ::のbasic_regex> ::のbasic_regex(スタンダード::のbasic_regex> & &)noexcept': 'CONSTはwchar_t *'

エラーC2672 'へのconst char型[21]' からの引数1を変換することはできません:「STD :: regex_replace ':一致するオーバーロードされた関数がありません。 D 4>

エラーC2784:「STD ::のbasic_string < _Elem、STD :: char_traits < _Elem>、のstd ::アロケータ< _Other >>のstd :: regex_replaceの(定数_Elem *、constのはstd ::のbasic_regex < _Elem、_RxTraits> &、constの_Elem *、のstd :: regex_constants :: match_flag_type) 'のテンプレート引数推論することができませんでした 'STD' から 'constの_Elemを* :: STRING_T'

私はこの問題は変化から来ている知っていますtchar.hそれらを解決するための提案。私はまた、CMakeをプロジェクトの設定に使用しています。プロジェクトはWindows 10で動作しています。

+0

'char_t'の代わりに' TCHAR'を使うか '_T'を落とすとうまくいくはずです。 –

答えて

0

あなたのコードを変更したくないとすれば、あなたのコードはUnicodeのために作成されている必要があります。-D_UNICODEをコンパイラに渡します。 This post suggests

ADD_DEFINITIONS(-DUNICODE) 
ADD_DEFINITIONS(-D_UNICODE) 

そしてthis oneは、GUIを通じてUnicodeを有効にする方法を示しています。

+0

'TCHAR'はひどいアドバイスです。なぜあなたは 'wchar_t'よりもそれを好きですか? Windows 98のサポートですか?それが唯一の正当な理由ですから。 – rubenvb

+0

@rubenvb OK、私は私の "ひどいアドバイス"を削除しましたが、私はシングルバイトまたはダブルバイトのいずれかをコンパイルするオプションを残しておくと思っていました。私は長年にわたってWindowsをやっていないので、シングルバイトのテキスト文字列は効果的に廃止されましたか? –

+0

@ KenY-Nあなたの答えをありがとう、私は同様の問題を持っています "任意の演算子は、const std :: basic_stringタイプの右オペランドを取る見つかりました"、任意のアイデア? (別の質問を投稿する方がいいですか?)コンパイラを変更すると私が狂ってしまいます。 –

関連する問題