【发布时间】:2015-02-20 22:10:50
【问题描述】:
我正在将一些代码从 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 吗?
【问题讨论】:
-
使用 MinGW 构建时定义的
_T()宏是什么? -
听起来你没有定义_UNICODE。见:msdn.microsoft.com/en-us/library/dybsewaf.aspx
-
@JamesFranco,T 变体根据定义的预处理器值使用窄字符串或宽字符串。它们已经过时了。明确使用窄字符串或宽字符串。与 Windows API 交互时,更喜欢使用宽版本。
-
@JamesFranco
__T()只是另一个宏,如果你一直追踪它,你会看到它扩展到L或者什么都没有,这取决于UNICODE(或者可能是 @987654330 @) 预处理器符号是否定义。听起来您没有定义它,在这种情况下,看起来您复制粘贴了错误的错误语句。与您显示的代码行对应的应该是const char[4]而不是const char[6] -
加重不适。实际上有 两组 组宏和限定符。
UNICODE和_UNICODE,以及TEXT()和_T()。一组通过(并用于)Windows API 提供,另一组通过 MSVC 运行时提供。是啊,真有趣。
标签: c++ visual-studio gcc mingw-w64