2016-11-09 100 views
1

我必須沒有錯誤在Visual Studio編譯在Visual Studio 2015年它使用以下行2013年錯誤C2784,C2672和C2664在Visual Studio 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 char [21]' 到 '常量爲wchar_t *'

錯誤C2672轉換參數1:「STD :: regex_replace':沒有匹配的重載函數foun d 4>

錯誤C2784:「的std :: basic_string的< _Elem,性病:: char_traits < _Elem>,的std ::分配器< _其他>>的std :: regex_replace(常量_Elem *,常量性病:: basic_regex < _Elem,_RxTraits> &,常量_Elem *,性病:: regex_constants :: match_flag_type)「:不能推導出模板參數爲 '' 從 '的std :: string_t'

常量_Elem *我知道這個問題是從改變未來TCHAR.H。任何解決它們的建議。我還使用CMake的項目配置和項目在Windows 10

+0

如果您使用'TCHAR'而不是'char_t'或放棄'_T',它應該可以工作。 –

回答

0

運行假設你不想改變你的代碼,你需要確保你的代碼正在爲Unicode,所以通過-D_UNICODE編譯器。 This post suggests

ADD_DEFINITIONS(-DUNICODE) 
ADD_DEFINITIONS(-D_UNICODE) 

而且this one說明如何通過GUI實現統一。

+0

使用'TCHAR'是一個糟糕的建議。你爲什麼比'wchar_t'更喜歡? Windows 98支持?因爲這是唯一有效的原因。 – rubenvb

+0

@rubenvb好的,我刪除了我的「可怕建議」,但我認爲留下編譯單字節或雙字節的選項是合理的。我沒有做過很長時間的Windows,單字節文本字符串是否被有效棄用? –

+0

@ KenY-N感謝您的回答,我有類似的問題,「沒有發現操作符需要類型const std :: basic_string 的右側操作數」,任何想法? (發佈另一個問題是否更好?)不斷變化的編譯器讓我瘋狂。 –