Guten Tag Sirs,Problem C++ STD Iterator Vergleichsoperatoren
weil es aussieht wie meins wird nicht so gut sein.
ich eine Klasse C, die keine Kinder hat, sondern einen Vektor von Zeigern auf Instanzen einer anderen Klasse gemacht, nennen wir es B:
class C
{
public:
...
std::vector<B*> elements;
...
}
B hat auch einen Vektor von Zeigern auf Instanzen einer anderen Klasse, versuchen wir es nennen:
hatclass B
{
public:
...
std::vector<A*> elements2;
...
}
C eine Methode, die die Elemente der Elemente und elements2 durchläuft und wie das funktioniert:
std::vector<B*>::iterator it1;
std::vector<A*>::iterator it2;
for (it1=this->elements.begin(); it1!=this->elements.end(); ++it1)
{
for (it2 = it1->elements2.begin(); it12=it1->elements2.end(); ++it2)
{
it2->do_something(); //method of class A
}
}
Aber der Compiler (g ++) sagt mir immer, es gibt keine Übereinstimmung für Operator! = In (Klassenhierarchie).
Weiß jemand, was ich falsch gemacht habe? Andere Operatoren wie '<' scheinen nicht zu funktionieren.
Ich bin kein Neuling, aber es ist das erste Mal, dass ich Iteratoren in C++ benutze (früherer Python-Programmierer) und ich kann nicht wirklich herausfinden, was mit meinem Code nicht stimmt.
Danke für die Hilfe im Voraus, ich verliere meine Haare darüber!
Edit: Ich füge den gesamten Fehler als Referenz. Ich habe es bearbeitet, um die Frage zu passen, ich hoffe, ich habe nichts vermasselt:
keine Übereinstimmung für 'Operator! =' In 'it1! .std :: vector < _TP, _Alloc> :: Ende mit _TP = B *, _Alloc = std :: allocator‘
, dass ein Tippfehler war, tut mir leid. it1 (innere Schleife) sollte natürlich it2 sein. Es kompiliert immer noch nicht. Edit: Ich bekomme den Compiler Fehler vor der inneren Schleife, sowohl auf der äußeren als auch auf der inneren Schleife. – Percival
@Percival: Antwort bearbeitet – icecrime
Das Erstellen von Iteratoren für die Enden der Vektoren schaltete scheinbar die Probleme des Bedieners aus, obwohl einige andere entstanden (mein Fehler wahrscheinlich). Ich frage mich, was die Ursache dafür war. Ich werde versuchen, einige der anderen Fehler zu beheben. Bis dahin ist dies die beste Antwort. Vielen Dank! Edit: funktioniert perfekt. Beste Antwort! – Percival