2011-08-02 128 views
1

我只是不繼的問題是什麼,我收到此錯誤信息:錯誤C2593:「操作符==」不明確

error C2593: 'operator ==' is ambiguous 

用在我的項目這行代碼時,這個源精編VC6但在我的VC2010中,我收到了不允許編譯的錯誤消息。來源如下。

if(m_cardThreePlace == 0) { 
    // generate player cards 
    OnCardGenerate(3); 

    OnWhatPlayerCardsActive(3); 
    // set card for placement 
    m_cardThreePlace = m_cardPlaceTemp; 
    // clear placement temp 
    m_cardPlaceTemp = _T(""); 
} 

聲明看起來像這樣:

CString m_cardThreePlace;  

m_cardThreePlace = _T(""); 

輸出窗口示出了該:

BlackJack.cpp(239):錯誤C2593: '運算符==' 是模糊 C: \ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ cstringt.h(2551):可能是'bool ATL :: CStringT :: operator ==(const ATL :: CStringT &,char)throw()'[使用參數依賴查找找到] 與 [ BaseType = char, StringTraits = StrTraitMFC ] C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ cstringt.h(2400):或'bool ATL :: CStringT :: operator == (常量ATL :: CStringT &,常量爲wchar_t *)擲(...)」 [發現使用參數相關查找] 與 [ BASETYPE =字符, StringTraits = StrTraitMFC ] C:\ Program Files文件\微軟Visual Studio 10.0 \ VC \ atlmfc \ include \ cstringt.h(2385):或'bool ATL :: CStringT :: operator ==(const ATL :: CStringT &,const char *)throw()'[found using argument-依賴查找] 與 [ BASETYPE =字符, StringTraits = StrTraitMFC ] 試圖匹配參數列表「(CString的,INT)」

+0

m_cardThreePlace的外觀是什麼樣的? – hatchet

+0

輸出窗口中是否有任何內容?這應該顯示完整的編譯日誌,包括一些與錯誤有關的信息。 –

回答

1

你得到一個編譯器錯誤字面原因是CString提供==三個適用重載操作員:一個用於比較單個char,兩個用於比較char*wchar_t*品種的C風格字符串。文字0可能會轉換爲這些類型中的任何一種,因此編譯器無法明確地找出您的意思。現在

,你在這裏得到一個錯誤的有意義的原因是因爲==旨在比較字符串和你想比作。我猜你試圖看看m_cardThreePlace是否爲空字符串。如果這是你要什麼,你可以簡單的寫:

if(m_cardThreePlace.IsEmpty()) 

這是很好的,你的代碼不再編譯,因爲它是顯而易見的是,你和你意思是兩回事。

+0

@Dave:很高興爲您工作。如果您將來有更多問題,請發佈!這就是爲什麼。提醒一下,如果答案對你的問題是正確的,那麼[將它標記爲已接受]是正確的禮節(http://stackoverflow.com/faq#howtoask)。這有助於其他具有相同問題的人迅速看到解決方案(並幫助解答問題)。 – zinglon