在TextOut行的代码块中遇到一些麻烦,它说:
error: cannot convert 'std::string* {aka std::basic_string<char>*}' to
'LPCSTR {aka const char*}' for argument 4 to
'BOOL TextOutA(HDC, int, int, LPCSTR, int)'
我已经搜索了一段时间,但却找不到任何永远不会让我迷惑的事情,也无法完成我想要做的事情,这就是画字符串。
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
string text = "Something";
RECT rect;
GetClientRect( hwnd, &rect );
hdc = BeginPaint( hwnd, &ps );
TextOut( hdc, rect.right/2, rect.bottom/2, &text, 1 );
EndPaint( hwnd, &ps );
}
return 0;
break;
答案 0 :(得分:3)
您需要将指针传递给char数组,而不是C ++字符串。尝试:
TextOut( hdc, rect.right/2, rect.bottom/2, text.c_str(), 1 );
请注意,您已要求它只输出一个字符。
答案 1 :(得分:3)
错误消息解释了问题所在:
LPCSTR
类型是typedef(别名)const char *
。这是一个C风格的指针,它是常量字符串"Something"
默认为(但不是text
)。
std::string
类型是typedef(别名)std::basic_string<char>
。这是一个C ++模板类,用于动态管理字符串,如C#/ Java字符串,或MFC / ATL中的CString
类型。
&text
行是指向字符串对象的指针,而不是指向字符串本身的指针。同样,std::string
不会向const char *
提供隐式转换。您需要显式调用text.c_str()
,它适用于采用C风格字符串的API。
对于TextOut
的最后一个参数,您可以传递-1
来计算字符串的长度(不是1
)。或者,当您在std::string
对象中包含字符串时,可以使用text.size()
。