2012-05-21 153 views
0

我創建了使用由給定的代碼包含一個字符和一個字符串C++二叉樹超載

struct M2E 
{ char english; 
string morse;} 

一個stuct,我創建M2E的二進制樹是二叉樹 ,但我想在字符串這些M2Es排序爲了莫爾斯(「*」小於「 - 」) 所以我做了算子在結構M2E超載

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

,但我繼續給下面的錯誤消息時,即時通訊compling

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++; 
    } 

使用二進制節點的編碼IM是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的幫助

+0

實際上我把另一個重載運算符>除非你使用Visual Studio這是不工作的,以及 –

回答

1

問題是您在insert()中採用const datatype dataItem,但operator==採用非常數M2E p arameter。

你需要指定operator==參數類型爲const

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

記住const是一個合同:該功能保證不會修改其參數的值。所以insert()作出了這個承諾,但operator==沒有,所以insert()不能使該運算符按原樣調用它。通過添加constoperator==的參數類型,你讓operator==做出了同樣的承諾,所以insert()可以稱之爲

+0

,上這將編譯好。 –

+0

@ std''OrgnlDave - 哪個版本?它認爲新標準在符合標準 – Attila

+0

10和11中相當不錯。這是令人費解的,但BC編譯它很好,並在運行時愉快地遞歸。我相信它也未能展示正確的行爲(錯誤和拒絕編譯)在更微不足道的情況下,但這是很方便的。 http://ideone.com/STAXJ –