Aufruf von member-Funktionen von einem Objekt gespeichert in einem Vektor
Dies klingt vielleicht wie eine newbie-Frage. Wie rufe ich eine member-Funktion eines Objekts, gespeichert in einem Vektor ? Angeblich habe ich diese Klasse:
class A {
public:
void foo() {
std::cout << "Hello World"; }
};
Dann Speicher ich einige Objekte in einem vector:
std::vector<A*> objects;
A* b;
A* c;
A* d;
objects.push_back(b);
objects.push_back(c);
objects.push_back(d);
Nun möchte ich eine Schleife erstellen, in der jedes Objekt in den Vektor nennen würde, es ist ein eigenes foo () - Funktion. Wie sollte ich das tun ? Zuerst dachte ich, ich könnte nur so etwas tun:
objects[2].foo();
Aber es scheint, dass ich es nicht tun wie diese.
- Versuchen Sie, Objekte[2]->foo()
- Die sind nicht "Objekte, gespeichert in einem Vektor -" die sind "Objekt-Zeiger gespeichert in einem Vektor".
Du musst angemeldet sein, um einen Kommentar abzugeben.
std::vector::operator[] liefert eine Referenz auf das Objekt std::vector. Wie Ihr
objects
speichert einen Zeiger aufA
, sollten Sie es nennen:Die einfachste Schleife ist:
Verwendung von C++11 for-Schleife:
Oder for_each(müssen schreiben Sie eine kleine lambda, obwohl)
Seite beachten:
In der Praxis würde man besser speichern des Werts in der STL-container.
Wenn Sie speichern möchten, Zeiger mit STL-container, eine bessere Nutzung smart-pointer, z.B.
Du kann hierzu:
Bitte ein bisschen genauer über den genauen Fehler. Ich vermute, dass vielleicht das ganze problem wurde versucht, die Referenz ein Zeiger auf ein Objekt mit "." statt "->".
Aber ja, im Allgemeinen:
1) speichern Sie können ein Objekt oder einen Zeiger auf ein Objekt in beliebiger STL-container
2) nennen Sie können jede öffentliche Methode von diesem Objekt auf den Zugriff aus dem container.
Die Sie erstellt haben Zeiger auf Eine Klasse und nicht zu Instanzen. So, Sie sollten Zugang die Methode foo mit pointer-syntax.
ich.e
In C++98 und C++03 (Da die anderen Antworten schon sagen, wie Sie es tun in dem neuen standard) können Sie die Verwendung von std::for_each und die std::mem_fun adapter:
Std::for_each wendet eine Funktion oder Funktor, um jedes der Elemente in der Reihe.
Std::mem_fun adapter nimmt einen Zeiger auf eine Funktion in seinem Konstruktor und einen Zeiger auf ein Objekt als (erste) argument für operator().
Dadurch wird die std::for_each aufrufen der foo () - member-Funktion auf jedes element im array. Wenn der Vektor Werte auf stattdessen der Zeiger, die Sie verwenden können, std::mem_fun_ref statt.
Als für die Fehler, die Sie bekommen, denken Sie daran, dass Ihr Vektor ist eine Sammlung von Zeigern, so dass Sie sollten aufrufen der Funktionen wie folgt: