ошибка C2106: '=': левый операнд должен иметь значение l двоичное дерево C ++ - PullRequest
0 голосов
/ 04 февраля 2012

Я пишу бинарное дерево, начал получать ошибки, поэтому я удалил все свои шаблоны, но он все равно не скомпилируется из-за моей последней ошибки! Написание рекурсивной функции добавления, но не уверен, как добавить мой новый dataClass в мое дерево, когда оно находит пустой узел

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

1 Ответ

0 голосов
/ 04 февраля 2012

Нельзя назначить на 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...