2012-02-04 90 views
-1

我正在寫一個二叉樹,開始收到錯誤,所以我已經刪除了所有的模板,但它仍然不會編譯,難倒我最後的錯誤! 寫一個遞歸的附加功能,但不知道如何到我的新的數據類添加到我的樹時,發現一個空的節點錯誤C2106:'=':左操作數必須是l值C++二進制樹

#pragma once 
#include <cstring> 

typedef dataClass T; 
//template <class T> 
class treeNode 
{ 
private: 
treeNode* _greaterNode; 
treeNode* _lessNode; 
T _data; 
public: 
treeNode(T data); 
void add(T data); 
void del(T data); 
}; 

//template <class T> 
treeNode/*<T>*/::treeNode(T data) 
{ 
_data = data; 
_greaterNode = _lessNode = NULL; 

} 
//template <class T> 
void treeNode/*<T>*/::add(T data) 
{ 
if(_data == NULL) 
{ 
    // add here 
    this = new treeNode(data); 
} 
else if(data > _data) 
{ 
    // data is bigger go to greater 
    this->_greaterNode->add(data); 
} 
else if(data < _data) 
{ 
    // data is lower go to less than 
    this->_lessNode->add(data); 
} 
else 
{ 
    // data the same, throw exception 
} 
} 

它打破:

if(_data == NULL) 
{ 
    // add here 
    this = new treeNode(data); 
} 
+3

'this'是'treeNode的* const'不能修改。你應該只是做'_data = data'。 – 2012-02-04 19:24:07

+0

In。書房。塔季翁。 – 2012-02-04 19:28:06

+2

而「它破」不是錯誤描述。 – 2012-02-04 19:28:42

回答

0

您不能分配到this!您可以剔除*this,如*this = treenode(data);,但這可能會導致其他錯誤,因爲節點指針會被覆蓋。

爲什麼不簡單地將_data設置爲參數data

而且,在做遞歸調用時,你應該建立鏈接,如果它們不存在:

else if(data > _data) 
{ 
    // data is bigger go to greater 
    if (this->_greaterNode == NULL) 
     this->_greaterNode = new treeNode(data); 
    else 
     this->_greaterNode->add(data); 
} 
相關問題