iteratoren & templates - wie funktoniert es?
-
Grüße,
Ich wollte mal fragen ob irgendwer ein gutes Tutorial für das Thema iteratoren in templates kennt. Die bisherigen haben mir irgendwie alle nicht weiter geholfen.
Steh da momentan irgendwie an.
-
Lies ein Buch.
-
hab ich - das hilft mir nur leider nicht weiter
-
Um dir weiter helfen zu können musst du erst mal alle tuts und bücher auflisten die du schon gelesen hast
-
also um das konkret anzugehen:
ich habe ein template vector und diesen will ich nach einem element durchsuchen, aber hab probleme mit dem iterator, denn der nimmt das einfach nicht so an wie ich will und zwar kommt ständig diese Fehermeldung ("Human" ersetzt dann das T):
error: no match for 'operator!=' in '(&iter)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Human*, _Container = std::vector<Human, std::allocator<Human> >]() != y'
und das wäre der codeschnipsel dazu:
void add (T x,T y) { std::vector<T> myVec; typename std::vector<T>::iterator iter=myVec.begin(); while (iter != myVec.end() && *iter != x){ myVec.push_back(x); vec_idx++; } }
Was mache ich falsch? Hoffe ihr könnt mir helfen.
-
Das ist kein Problem der Iteratoren. Du vergleichst das, worauf der Iterator zeigt, mit einem normalen Objekt der Klasse Human. Diese Klasse hat offensichtlich keinen operator!=.
-
hat T vielleicht keinen operator!= definiert?
-
ok danke, aber die "begin" methode liefert ja einen iterator, wie kann ich das problem am besten lösen? ... also versteh noch nicht ganz wie ich das am besten umgehen soll...
-
Mit den Iteratoren hat das immernoch nichts zu tun. Das würde auch passieren, wenn Du "x != x" schreibst.
Spendiere der Klasse Human einen operator!=.
-
Auch wenn diese Frage sicher total doof ist aber:
Ist nicht != ein Standardoperator?
Ich muss ja gestehen das ich gar nicht weiß was ihr damit meint das ich Human einen Operator geben soll. Also bisher habe ich noch nie irgendeiner Klasse einen Operator gegeben.Wäre da auch für jeden weiterführenden Link sehr dankbar.
Grüße
Daniel
-
class Human // hast du laut fehlermeldung irgendwo mal gschrieben { // viel blubb hier, aber kein operator!= }; ... Human a; Human b; if(a != b) // nein, nicht möglich, was soll er denn vergleichen? alle member-variablen? nur bestimmte? ganz was anderes?
MfG SideWinder
-
Wenn du nur feststellen willst, ob es das gleiche Objekt ist, dann reicht Pointervergleich und dafür musst du nix schreiebn.
-
Ehm, ich empfehle dringend ein C++ Tutorial, sei es noch so kurz. Zum Beispiel das hier:
http://www.cplusplus.com/doc/tutorial/Da hast du dann auch sowas drin, wie Operatoren überladen:
http://www.cplusplus.com/doc/tutorial/classes2.htmlUnd der Titel des Threads ist nun etwas falsch gewählt
Grüssli
-
ich finde das übrigens völlig unöglich das c++ keinen standard operator ==
schreibt,
1 . meistens ist es eh ein vergleich aller member2 . erweitert man die klasse um ein member,
vergisst man leicht, das man man operator== auch noch anpassen muss3. operator = wird ja auch vordefiniert
-
ist ja ein crosspost: http://entwickler-forum.de/showthread.php?t=48497