<< - Operator überschreiben
-
Hallo!
Ich bekomme einen Compile-Fehler (Zeile 70) und kann nicht verstehen was da falsch ist. Könnte bitte jemand Helfen?
Danke schon mal.
#ifndef __STACK_INCLUDED__ #define __STACK_INCLUDED__ #include <iostream> #include <list> #include "EmptyStackException.h" template<class T> /** * Implementiert einen Stack mit Hilfe der generischen * STL-Klasse <code>list</code>. */ class Stack { private: /** * enthaelt die Elemente. */ std::list<T> stack; public: /** * Prueft ob Stack leer ist oder nicht * @return 1 wenn Stack leer ist. **/ bool empty() { return stack.empty(); } /** * Gibt das oberste Stack element als Referenz zurueck. * @return referenz auf das oberste Element. **/ T& peek() { //wenn stack nicht leer ist if (!stack.empty()) { return stack.back(); } else { throw EmptyStackException(); } } /** * Entfernt das oberste Element vom Stack **/ void pop() { //wenn stack nicht leer ist if (!stack.empty()) { stack.pop_back(); } else { throw EmptyStackException(); } } /** * legt ein neues Element auf den stack. * @param value das neue Element **/ void push(T value) { stack.push_back(value); } /** * Ueberschreibt << (cout) Operator. */ friend std::ostream& operator<<(std::ostream& out, const Stack& stackSrc) { std::list<T>::iterator it; // HIER FEHLER! for(it = stackSrc.stack.end(); it != stackSrc.stack.begin(); it--){ std::cout << *it << std::endl; } return out; } }; #endif
-
1. poste bei so was doch bitte auch immer den fehler mit
2. der fehler kommt nicht hier
std::list<T>::iterator it; // HIER FEHLER!sondern wirklich in Zeile 70.
Dazu musst du aber diese Zeile ändern, in:
std::list<T>::const_iterator it;
du hast ein konstantes objekt - kannst also keine nicht const-funktionen aufrufen.
undstd::list<T>::iterator std::list<T>::begin()ist nun mal nicht const -std::list<T>::const_iterator std::list<T>::begin() constaber
bb
PS:
__STACK_INCLUDED__schlechter include name - alles mit 2 unterstrichen am stück oder unterstrich großbuchstabe am anfang ist für den compiler reserviert - ohne einschränkungen.
2. es gibt bereits eine klasse std::stack (#include <stack>), weist du das?
-
Das Thema kam erst gestern - da muss typename vor std::list<T>::iterator hin.
-
wxSkip schrieb:
Das Thema kam erst gestern - da muss typename vor std::list<T>::iterator hin.
stimmt - das typename braucht man auch noch(zumindest normalerweise, der msvc sollte es nicht brauchen) - aber nichts destro trotz muss da nen const_iterator hin...
bb
-
ok
typename std::list<T>::const_iterator it;was macht dieses typename in dem fall genau?
-
es sagt dem compiler, dass es sich um einen typen handelt und nicht um eine (static) variable
bb
-