Hallo zusammen,
leider bekomme ich mein Problem eigenständig nicht gelöst =(
Was ich versuche ist einen BinärBaum in C++ als Template Klasse zu schreiben.
Nun habe ich wie folgt begonnen:
Das Problem ist bei recEinfuegen und er zeigt mir folgendes:
Hat er ein Problem Node in der Klasse BinTree aufzulösen? BinTree<T>::Node funktioniert auch nicht =(
Weiß vielleicht jemand weiter?
leider bekomme ich mein Problem eigenständig nicht gelöst =(
Was ich versuche ist einen BinärBaum in C++ als Template Klasse zu schreiben.
Nun habe ich wie folgt begonnen:
C++:
#include <memory>
#include <iostream>
using namespace std;
template<class T>
class BinTree {
private:
class Node {
T value;
shared_ptr<Node> left;
shared_ptr<Node> right;
public:
Node(T value, shared_ptr<Node> left = nullptr, shared_ptr<Node> right =
nullptr) :
value(value), left(left), right(right) {}
shared_ptr<Node>& getLeft() {return left;}
shared_ptr<Node>& getRight() {return right;}
T getValue() const {return value;}
void setLeft(shared_ptr<Node> &left) {this->left = left;}
void setRight(shared_ptr<Node> &right) {this->right = right;}
void setValue(T value) {this->value = value;}
};
shared_ptr<Node> root;
void copy(shared_ptr<Node> &other);
void recCopy(shared_ptr<Node> &other);
shared_ptr<Node>& recEinfuegen(shared_ptr<Node> &other, T value);
void recPrint(shared_ptr<Node> other);
public:
BinTree();
virtual ~BinTree() = default;
BinTree(const BinTree &other);
BinTree(BinTree &&other);
BinTree& operator=(const BinTree &other);
BinTree& operator=(BinTree &&other);
void einfuegen(T value);
void ausgabe();
};
template<class T>
void BinTree<T>::einfuegen(T value) {
if (root == nullptr)
root = shared_ptr<Node> { new Node { value } };
else
recEinfuegen(root, value);
}
template<class T>
shared_ptr<BinTree::Node>& BinTree<T>::recEinfuegen(shared_ptr<Node> &other,
T value) {
if (other == nullptr)
other = shared_ptr<Node> { new Node { value } };
else if (other->getValue() >= value)
other->setLeft(recEinfuegen(other->getLeft, value));
else
other->setRight(recEinfuegen(other->getRight, value));
return other;
}
template<class T>
void BinTree<T>::copy(shared_ptr<Node> &other) {...}
template<class T>
void BinTree<T>::recCopy(shared_ptr<Node> &other) {...}
template<class T>
BinTree<T>::BinTree() : root(nullptr) { }
template<class T>
BinTree<T>::BinTree(const BinTree &other):root(nullptr) {...}
template<class T>
BinTree<T>::BinTree(BinTree &&other):root(other->root) {}
template<class T>
BinTree<T>& BinTree<T>::operator =(const BinTree &other) {...}
template<class T>
BinTree<T>& BinTree<T>::operator =(BinTree &&other) {...}
template<class T>
void BinTree<T>::ausgabe() { ... }
template<class T>
void BinTree<T>::recPrint(shared_ptr<Node> other) {...}
Das Problem ist bei recEinfuegen und er zeigt mir folgendes:
Code:
../BinTreeNode.h:133:25: error: template argument 1 is invalid
shared_ptr<BinTree::Node>& BinTree<T>::recEinfuegen(shared_ptr<Node> &other,
^
../BinTreeNode.h:133:28: error: prototype for ‘int& BinTree<T>::recEinfuegen(std::shared_ptr<BinTree<T>::Node>&, T)’ does not match any in class ‘BinTree<T>’
shared_ptr<BinTree::Node>& BinTree<T>::recEinfuegen(shared_ptr<Node> &other,
^~~~~~~~~~
../BinTreeNode.h:50:20: error: candidate is: std::shared_ptr<BinTree<T>::Node>& BinTree<T>::recEinfuegen(std::shared_ptr<BinTree<T>::Node>&, T)
shared_ptr<Node>& recEinfuegen(shared_ptr<Node> &other, T value);
^~~~~~~~~~~~
Hat er ein Problem Node in der Klasse BinTree aufzulösen? BinTree<T>::Node funktioniert auch nicht =(
Weiß vielleicht jemand weiter?