在VS2005环境,建立的MFC工程。定义了一个CString 对象m_strInputLine
在消息处理函数
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
m_strInputLine += nChar;
}
编译时出错
说重载操作符出错,提示信息:error C2593: “operator +=”不明确
解答如下:
CString,在vs2008中,为unicode,wchar_t基类型。
而CString,在vc6.0中为ansi,char基类型。
所以在vs2008:
m_strInputLine是wchar_t。
应将UINT nChar转换成wchar_t。
处理键盘输入读取按键时
void CWriterView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CWriterDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData += (char)nChar;
Invalidate();
CView::OnChar(nChar, nRepCnt, nFlags);
}
编译时出现“operator +=”不明确,也就是pDoc->StringData += nChar;
改正方法:
pDoc->StringData+=(char)nChar,因为系统里面存在一个wchar_t的类型,所以如果支持了这个类型的话,从unsigned nt转换到wchar_t和char的等级都是标准转换,所以编译器无法判断到底应该转换到哪一个,故而导致了这个问题。
处理键盘输入读取按键时
void CWriterView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CWriterDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData += (char)nChar;
Invalidate();
CView::OnChar(nChar, nRepCnt, nFlags);
}
编译时出现“operator +=”不明确,也就是pDoc->StringData += nChar;
改正方法:
pDoc->StringData+=(char)nChar,因为系统里面存在一个wchar_t的类型,所以如果支持了这个类型的话,从unsigned nt转换到wchar_t和char的等级都是标准转换,所以编译器无法判断到底应该转换到哪一个,故而导致了这个问题。