Closed jakubo87 closed 6 years ago
Du brauchst in der Klassenimplementierung nicht mehr den default angeben also:
template <typename ValueT, ValueT default_value> class list {...}
Das sollte klappen.
dann meckert er aber über das hier
In file included from vector_test.cc:7: ../solution/list.h:16:25: Fehler: Spezifikation mit geschachteltem Namen erwartet typedef typename list<ValueT, default_value> list_t; ^
~~~~~~
der Zeiger sollte auf "list" stehen
Ich hab dort
typedef list<ValueT, default_value> list_t;
und bei dir funktionierts?! bei mir meckert er, dass ValueT nicht deklariert wurde...
hab ja derzeit selbst ein Problem, weshalb ich nicht für die Richtigkeit meiner Lösung garantieren kann. Da es aber nur eine forward linked list ist (heißt es so..?) reicht dir ein Vergleich mit "const Iterator _end=nullptr;" um das Ende zu bestimmen. Was den Anfang betrifft: "iterator _begin=_end" zu anfang. Da nicht "const" kannst du ihn dann auf das erste Element zeigen lassen und wenn du den Wert brauchst, dereferenzieren... bzw wieder auf _end wenn das letzte element gepoppt wurde. Iterator hat ja nur ein Member und das ist selbst ein pointer auf eine list_node. Wenn ich es richtig verstehe kannst du auf _head und _tail komplett verzichten.
Nächste Möglichkeit:
template<typename ValueT, ValueT default_value> class list;
template <
typename ValueT,
ValueT default_value = ValueT()>
class list {...}
mit Raten komme ich da befürchte ich fürs erste weiter. habe auch schon einige Möglichkeiten durchprobiert. Auch mit friend und anderen Quatsch...
@jakubo87 die oben gennanten Möglichkeiten funktionieren bei mir alle. Aber okay, warten wir mal auf das Wissen von @fuchsto .
`#include
namespace cpppc { // forward declaration template <typename ValueT, ValueT default_value = ValueT()> class list;
template <typename ValueT, ValueT default_value = ValueT()> class list { typedef list<ValueT, default_value> self_t; public:
// list::iterator
class iterator {
typedef typename list<ValueT, default_value> list_t;
typedef typename list_t::list_node list_node_t;
typedef typename list_t::iterator self_t;
public:
iterator() = delete;
`