는 C

2012-05-21 6 views
0

내가 주어진 코드를 사용하여 하나 개의 문자와 하나의 문자열는 C

struct M2E 
{ char english; 
string morse;} 

를 포함하는 stuct을 만들어 과부하, 나는 bintree입니다 M2E의 이진 트리를 만들어 binarytree ++하지만 난 문자열이 M2Es을 정렬 할 모스 순서 ("*"보다 작 "-") 그래서 내가 메신저

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

는 그러나 나는 다음과 같은 오류 메시지를주는 유지 구조체 M2E에 과부하 OPERATOR 시스템 compling 않았을 때 5,는

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

들으

+0

난 당신이 비주얼 스튜디오를 사용하지 않는뿐만 아니라 –

답변

1

문제를 돕는 것은 당신이 insert()에서 const datatype dataItem을 복용하는 것입니다,하지만 operator==는 const가 아닌에게 M2E P 소요 arameter.

당신은 const가되도록 operator== 매개 변수 유형을 지정해야합니다

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 –