【问题标题】:error C2593: 'operator ==' is ambiguous错误 C2593:“操作员 ==”不明确
【发布时间】:2011-10-17 22:44:40
【问题描述】:

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

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() ' [使用参数相关查找找到] 和 [ 基本类型=字符, 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( ...)' [使用参数相关查找找到] 和 [ 基本类型=字符, 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( )' [使用参数相关查找找到] 和 [ 基本类型=字符, StringTraits=StrTraitMFC ] 尝试匹配参数列表 '(CString, int)'

【问题讨论】:

  • m_cardThreePlace 的声明是什么样的?
  • 你的输出窗口有什么东西吗?这应该会显示完整的编译日志,包括一些与错误相关的信息。

标签: visual-studio


【解决方案1】:

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

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

if( m_cardThreePlace.IsEmpty() )

您的代码不再编译很好,因为很明显您编写的内容和您的意思是两个不同的东西。

【讨论】:

  • @Dave:很高兴这对你有用。如果您将来有更多问题,请发布!这就是 SO 的用途。提醒一下,如果您的问题的答案是正确的,那么mark it as accepted 是正确的礼仪。这有助于其他有相同问题的人快速找到解决方案(也有助于回答者)。
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多