我只是没有关注问题所在,我收到此错误消息:
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)'
时答案 0 :(得分:1)
您收到编译器错误的原因是CString
提供了==
运算符的三个适用重载:一个用于与单个char
进行比较,另外两个用于比较char*
和wchar_t*
种类的C风格字符串。文字0
可能会转换为这些类型中的任何一种,因此编译器无法明确指出您的意思。
现在,您在此处收到错误的有意义的原因是因为==
旨在比较字符串而您尝试与数字进行比较。我猜你在试图查看m_cardThreePlace
是否为空字符串。如果这就是你想要的,你可以简单地写一下:
if( m_cardThreePlace.IsEmpty() )
你的代码不再编译是好的,因为很明显你写的以及你的意味着什么是两个不同的东西。