2017-10-06 46 views
-4

第一次使用Visual Studio 2017 Enterprose,无法制作简单的键盘处理程序。visual studio operator + =模糊

我得到这个编译错误:

Error: C2593 'operator +=' is ambiguous

在下面的代码段

void CAppView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{ 
    // TODO: Add your message handler code here and/or call default 

    CView::OnChar(nChar, nRepCnt, nFlags); 
    CAppDoc *pDoc = GetDocument(); 
    ASSERT_VALID(pDoc); 
    pDoc->d+=nChar; 
    //Invalidate(); 
} 

我已经使用了相同的代码,并在MFC C++ VS 6.0企业版的应用工作。

+5

什么是'pDoc-> d'?你可以请尝试创建一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)并向我们展示? –

+3

此外,请将* full *和* Complete *错误输出复制粘贴到问题中。这样的错误信息通常会有更多关于编译器认为存在歧义的信息。 –

+0

你绝对需要提供'CAppDoc :: d'的定义。没有,我们只能猜测。有一部分是因为拥有一个名为'd'的类成员真的很难看。 –

回答

1

不知道d变量是什么,但...尝试它强制转换为字符:

pDoc->d += (TCHAR)nChar; 
+0

谢谢,程序工作。 – Breacher

+0

@Breacher:你可能是错的。这确实使编译器无声,但程序可能仍然是错误的。我们不知道,因为您尚未分享相关信息。要么做到这一点,要么继续使用可能以您没有预料到的方式失败的解决方案。无论您尝试解决什么问题,使用TCHAR都是错误的解决方案。 – IInspectable

+0

@IInspectable如果'D'是一个'CString'我很肯定演员阵容是有效的。 – l33t

1

我依稀记得,这个用于与旧的编译器编译前很长一段时间:

CString foo; 
foo += 65; 

但是在我的Visual Studio 2017中,我得到和你一样的错误。

但这个工程:

foo += (TCHAR)65; 

它实际上追加'A'字符的字符串foo

所以我想你会遇到这个确切的问题。

+0

谢谢,程序运行正常。 我曾尝试将nChar类型转换为Cstring,但它提供了一些新的错误。 什么是TCHAR? 有一个名为'd'的班级成员真的很难看;为什么? – Breacher

+0

'TCHAR'实际上是'char',谷歌它太宽泛以至于无法评论。为什么'丑陋?如果我看到'd',我不知道这可能是什么,但如果它被称为例如'typedchars'会更清楚。 –

+0

呃,'TCHAR'可以是'char'或'wchar_t',这取决于是否定义了UNICODE预处理器符号。尽管如此,2017年没有可以使用“TCHAR”的理由。 – IInspectable