将 std::wstring 从 visual studio 移植到 mingw gcc
porting std::wstring from visual studio to mingw gcc
我正在将一些代码从 Visual studio 移植到 mingw gcc。
我遇到了这个声明
if ( mnode.GetTag() == _T( "val" ) )
return true;
这是GetTag()方法的定义
const std::wstring &GetTag() const;
我遇到错误
error: no matching function for call to 'std::basic_string<wchar_t>::basic_string(const char [6])'|
现在阅读 this 我仍然不确定如何解决这个问题。
关于为什么会出现此错误的任何建议?是因为 wstring 吗?
您的问题似乎是 _UNICODE
预处理器宏未定义。 MSDN explains 这如何影响包含在 _T()
宏中的字符串文字。
pWnd->SetWindowText( _T("Hello") );
With _UNICODE
defined, _T
translates the literal string to the L
-prefixed form; otherwise, _T
translates the string without the L
prefix.
向字符串文字添加 L
前缀表示它是 wide string literal,并且 std::wstring
(或 std::basic_string<wchar_t>
)定义了 operator==
重载采用 wchar_t const *
参数,从而允许您的代码编译。
请注意,如果您要调用 Windows API 中的函数,还有一个相关的 UNICODE
宏。雷蒙德·陈 (Raymond Chen) 在 this post.
中很好地解释了这种疯狂
因此,解决问题的一种方法是将 _UNICODE
和 UNICODE
预处理器符号添加到 gcc 命令行。
但是不要这样做!这是我对此事的看法——与其依赖晦涩的宏,不如手动在字符串文字前加上 L
前缀。特别是在这种情况下,既然你说 GetTag()
总是 returns 一个 wstring const&
,我会说对那个字符串文字使用 _T()
宏是一个错误。
否则,在调用Windows API 函数时,直接调用宽字符版本即可。例如,将对 GetWindowText
的调用替换为 GetWindowTextW
.
我正在将一些代码从 Visual studio 移植到 mingw gcc。 我遇到了这个声明
if ( mnode.GetTag() == _T( "val" ) )
return true;
这是GetTag()方法的定义
const std::wstring &GetTag() const;
我遇到错误
error: no matching function for call to 'std::basic_string<wchar_t>::basic_string(const char [6])'|
现在阅读 this 我仍然不确定如何解决这个问题。 关于为什么会出现此错误的任何建议?是因为 wstring 吗?
您的问题似乎是 _UNICODE
预处理器宏未定义。 MSDN explains 这如何影响包含在 _T()
宏中的字符串文字。
pWnd->SetWindowText( _T("Hello") );
With
_UNICODE
defined,_T
translates the literal string to theL
-prefixed form; otherwise,_T
translates the string without theL
prefix.
向字符串文字添加 L
前缀表示它是 wide string literal,并且 std::wstring
(或 std::basic_string<wchar_t>
)定义了 operator==
重载采用 wchar_t const *
参数,从而允许您的代码编译。
请注意,如果您要调用 Windows API 中的函数,还有一个相关的 UNICODE
宏。雷蒙德·陈 (Raymond Chen) 在 this post.
因此,解决问题的一种方法是将 _UNICODE
和 UNICODE
预处理器符号添加到 gcc 命令行。
但是不要这样做!这是我对此事的看法——与其依赖晦涩的宏,不如手动在字符串文字前加上 L
前缀。特别是在这种情况下,既然你说 GetTag()
总是 returns 一个 wstring const&
,我会说对那个字符串文字使用 _T()
宏是一个错误。
否则,在调用Windows API 函数时,直接调用宽字符版本即可。例如,将对 GetWindowText
的调用替换为 GetWindowTextW
.