У меня есть бинарное дерево, которое я ищу:
TreeNode<Vessel*>* node = this->tree_->search("PotatoFace");
string mystring = node->print();
когда я запускаю его, узел содержит правильные данные, но когда я перехожу к печати этих данных, как только я ввожу:
string TreeNode<T>::print()
{
return data_->toString();
}
'this' (который должен быть 'узлом' и иметь тот же адрес памяти, что и 'узел') имеет все свои элементы данных, включая Vessel*, установленные в null.
Любые идеи?
Спасибо!
Полный узел дерева:
#pragma once
#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;
template <class T>
class TreeNode
{
private:
TreeNode<T>* greaterNode_;
TreeNode<T>* lessNode_;
TreeNode<T>* parentNode_;
TreeNode<T>* getLowest_();
T data_;
public:
TreeNode();
TreeNode(T data);
void add(T data);
bool operator==(const string &rhs);
TreeNode* search(T data);
void seqSearch(string data, TreeNode<T>* node);
void del(TreeNode<T>* root);
void toFile(ofstream& BSTFile);
TreeNode* compare(int sig[4]);
TreeNode* getRoot();
TreeNode* forward(TreeNode<T>* node);
string print();
};
template <class T>
TreeNode<T>::TreeNode(T data)
{
data_ = data;
greaterNode_ = lessNode_ = parentNode_= NULL;
}
template <class T>
TreeNode<T>::TreeNode()
{
}
template <class T>
void TreeNode<T>::seqSearch(string data, TreeNode<T>* node )
{
if(*data_ == data)
{
*node = this->data_;
}
if(this->lessNode_)
{
this->lessNode_->seqSearch(data, node);
}
if(this->greaterNode_)
{
this->greaterNode_->seqSearch(data, node);
}
}
template <class T>
string TreeNode<T>::print()
{
return data_->toString();
}
Все еще не совсем уверен, как объяснить, почему это не работает, но это была проблема области действия, вне узлов дерева классов бинарного дерева, потерянных данных. Убраны все функции дерева, которые возвращали узлы, теперь все работает.
TreeNode<Vessel*>* node = new TreeNode<Vessel*>();
бесполезен, поскольку вы переназначаетеnode
в следующей строке, что также приводит к утечке памяти? - person Luchian Grigore   schedule 07.05.2012