Visual Studio 2015中的错误C2784,C2672和C2664

时间:2016-11-09 08:55:01

标签: c++ c++11 visual-studio-2015

我在visual studio 2015中有以下几行。以前在Visual Studio 2013中编译时没有错误。

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

错误是:

错误C2664:&#39; std :: basic_regex&gt; :: basic_regex(std :: basic_regex&gt;&amp;&amp;)noexcept&#39;:无法转换参数1来自&#39; const char [21]&# 39; to&#39; const wchar_t *&#39;

错误C2672:&#39; std :: regex_replace&#39;:找不到匹配的重载函数 4&GT;

错误C2784:&#39; std :: basic_string&lt; _Elem,std :: char_traits&lt; _Elem&gt ;,std :: allocator&lt; _Other&gt;&gt; std :: regex_replace(const _Elem *,const std :: basic_regex&lt; _Elem,_RxTraits&gt;&amp;,const _Elem *,std :: regex_constants :: match_flag_type)&#39;:无法推断出&#39; const的模板参数_Elem *&#39;来自&#39; std :: string_t&#39;

我知道这个问题来自改变tchar.h。任何解决它们的建议。我还使用CMake进行项目配置,项目在Windows 10上运行。

1 个答案:

答案 0 :(得分:0)

假设您不想更改代码,则需要确保代码正在为Unicode构建,因此请将-D_UNICODE传递给编译器。 This post suggests

ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)

this one说明了如何通过GUI启用Unicode。