2017-10-06 59 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