0

1 つの文字と 1 つの文字列を含むスタクトを作成しました

 struct M2E
 { char english;
 string morse;}

によって与えられたコードを使用して、bintree である M2E のバイナリ ツリーを作成しましたが、これらの M2E を文字列モールス順 ("*" より小さい "-") で並べ替えたいので、構造体 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);
  }

助けてくれてthx

4

1 に答える 1

1

問題は、const datatype dataIteminを使用しinsert()ているのに、 がoperator==const 以外のM2Eパラメーターを使用していることです。

operator==パラメータの型を次のように指定する必要がありますconst

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

これは契約であることを思い出してくださいconst。関数は、そのパラメーターの値を変更しないことを約束します。したがってinsert()、この約束はしますがoperator==、そうではありません。そのため、insert()そのオペレーターにそのまま呼び出すことはできません。consttooperator==のパラメーター型を追加するoperator==ことで、同じ約束をするので、それinsert()を呼び出すことができます

于 2012-05-21T12:21:21.653 に答える