当前位置:  开发笔记 > 编程语言 > 正文

错误:'operator =='的模糊重载

如何解决《错误:'operator=='的模糊重载》经验,为你挑选了0个好方法。

我试图理解为什么我的c ++编译器与以下代码混淆:

struct Enum
{
  enum Type
  {
    T1,
    T2
  };
  Enum( Type t ):t_(t){}
  operator Type () const { return t_; }
private:
  Type t_;
    // prevent automatic conversion for any other built-in types such as bool, int, etc 
  template operator T () const;
};

  enum Type2
  {
    T1,
    T2
  };

int main()
{
  bool b;
  Type2 e1 = T1;
  Type2 e2 = T2;
  b = e1 == e2;

  Enum t1 = Enum::T1;
  Enum t2 = Enum::T2;
  b = t1 == t2;
  return 0;
}

编译导致:

$ c++ enum.cxx
enum.cxx: In function ‘int main()’:
enum.cxx:30:10: error: ambiguous overload for ‘operator==’ (operand types are ‘Enum’ and ‘Enum’)
   b = t1 == t2;
          ^
enum.cxx:30:10: note: candidates are:
enum.cxx:30:10: note: operator==(Enum::Type, Enum::Type) 
enum.cxx:30:10: note: operator==(int, int) 

我明白我可以通过明确说明来解决症状operator==:

  bool operator==(Enum const &rhs) { return t_ == rhs.t_; }

但我真正想要的是解释为什么enum只有当它在一个内部完成时才会导致歧义class.我写了这个小的枚举包装,因为我只需要在我的代码中使用C++ 03.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有