0

我创建了一个包含一个字符和一个字符串的结构

 struct M2E
 { char english;
 string morse;}

通过使用由给出的代码,我创建了一个 M2E 的二叉树,它是 bintree,但我想以字符串莫尔斯顺序对这些 M2E 进行排序(“*”小于“-”)所以我在 struct M2E 中做了一个运算符重载

 bool operator == (M2E& other) const
{
    return morse.compare(other.morse);
}

但是我在编译时不断给出以下错误消息

no match for "operator ==" in ((binNode<M2E>*)this)->binNode<M2E>::nodeData == dataItem
note:candidates are :bool M2E::operator==(M2E&) const

我用于二叉树的代码 bintree.h 是:

  template <typename dataType> class bintree
{  
  private:
  binNode<dataType> *root;
  int numItems;

  void insert(const dataType& newData) 
  {
     // insert the newData into the tree

     if (root == NULL) 
     {
        root = new binNode<dataType>(newData);
     } 
     else 
     {
        root->insert(root, newData);
     }
     numItems++;
  }

我用于二进制节点的代码 binnode.h 是:

  template <typename dataType> class binNode 
 {
 private:
  // private data ====================================
  dataType nodeData;
  binNode<dataType> *left, *right;

        void insert(binNode<dataType>* &root, const dataType& dataItem) 
  {
     if (nodeData == dataItem) 
     {
        throw std::invalid_argument("dataItem already in tree");
     }

     if (dataItem < nodeData) 
     {
        if (left == NULL) 
        {
           left = new binNode(dataItem);
        } 
        else 
        {
           left->insert(left, dataItem);
        }
     } 
     else 
     {
        if (right == NULL) 
        {
           right = new binNode(dataItem);
        } 
        else 
        {
           right->insert(right, dataItem);
        }
     }
     rebalance(root);
  }

谢谢帮助

4

1 回答 1

1

问题是你正在接受一个const datatype dataItemin insert(),但operator==接受一个非常量M2E参数。

您需要将operator==参数类型指定为const

bool operator == (const M2E& other) const {
  //...
}

请记住,这const是一个契约:函数承诺不会改变其参数的值。所以insert()做出这个承诺,但operator==没有,所以insert()不能让那个运营商按原样称呼它。通过添加consttooperator==的参数类型,你做出operator==了同样的承诺,所以insert()可以调用它

于 2012-05-21T12:21:21.653 回答