error C2593: “operator +=”不明确

来源:互联网 发布:iphone写日记的软件 编辑:程序博客网 时间:2024/06/05 18:33
http://blog.csdn.net/hxh129/article/details/9380141

在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的等级都是标准转换,所以编译器无法判断到底应该转换到哪一个,故而导致了这个问题。

0 0
原创粉丝点击