错误C2593:'operator =='不明确

时间:2011-08-02 04:32:54

标签: visual-studio

我只是没有关注问题所在,我收到此错误消息:

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:'operator =='不明确           C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ cstringt.h(2551):可能是'bool ATL :: CStringT :: operator ==(const ATL :: CStringT&,char)throw( )'[使用参数依赖查找找到]           同           [               BASETYPE =字符,               StringTraits = StrTraitMFC           ]           C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ cstringt.h(2400):或'bool ATL :: CStringT :: operator ==(const ATL :: CStringT&,const wchar_t *)throw (...)'[使用参数依赖查找找到]           同           [               BASETYPE =字符,               StringTraits = StrTraitMFC           ]           C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ cstringt.h(2385):或'bool ATL :: CStringT :: operator ==(const ATL :: CStringT&,const char *)throw ()'[使用参数依赖查找找到]           同           [               BASETYPE =字符,               StringTraits = StrTraitMFC           ]           在尝试匹配参数列表'(CString,int)'

1 个答案:

答案 0 :(得分:1)

您收到编译器错误的原因是CString提供了==运算符的三个适用重载:一个用于与单个char进行比较,另外两个用于比较char*wchar_t*种类的C风格字符串。文字0可能会转换为这些类型中的任何一种,因此编译器无法明确指出您的意思。

现在,您在此处收到错误的有意义的原因是因为==旨在比较字符串而您尝试与数字进行比较。我猜你在试图查看m_cardThreePlace是否为空字符串。如果这就是你想要的,你可以简单地写一下:

if( m_cardThreePlace.IsEmpty() )

你的代码不再编译是好的,因为很明显你写的以及你的意味着什么是两个不同的东西。