ich hab gerade ein Problem mit meiner List<T> Klasse. Würde dort sehr gerne eine Output Operation zur Verfügung stellen. Diese realisiere ich über friend ostream &operator<<(ostream &os, ListNode &other);
Nun habe ich aber das Problem das ich in der Header Datei nicht ListNode<T> schreiben kann. Weil er das T nicht kennt.
Weiß jemand wie man in Template Klassen friend Operatoren implementiert bekommt?
Hier mal mein Code zusammengefasst =)
Code: Alles auswählen
#ifndef LISTNODE_H_
#define LISTNODE_H_
#include <memory>
#include <iostream>
using namespace std;
template<class T>
class ListNode {
private:
class Node {
private:
T value;
unique_ptr<Node> next;
public:
Node(T value = { }, unique_ptr<Node> next = nullptr) :
value(value), next(move(next)) { }
unique_ptr<Node>& getNext() { .... }
void setNext(unique_ptr<Node> next) { .... }
T getValue() const { .... }
void setValue(T value) { ... }
};
unique_ptr<Node> anfang;
void recInsert(unique_ptr<Node> &s, T value);
void rekCopy(const unique_ptr<Node> &pAct);
void recPrint(const unique_ptr<Node> &s);
public:
ListNode();
virtual ~ListNode() = default;
ListNode(const ListNode<T> &other);
ListNode(ListNode<T> &&other);
ListNode<T>& operator=(const ListNode<T> &other);
ListNode<T>& operator=(ListNode<T> &&other);
void insert(T value);
void print();
friend ostream &operator<<(ostream &os, ListNode<T> &other);
};
//ostream &operator<<(ostream &os, ListNode<T> &other) {
// return os;
//}
#endif /* LISTNODE_H_ */

Natürlich ist in der ListNode Klasse noch mehr drin, Konstruktoren etc. habe ich raus genommen. Die void print() Mehtode macht derzeit das, was der << Operator später machen soll =D