Vector aus Automaten
-
Hi,
ich schreibe gerade ein Programm, in welches man Automaten eingibt, und diese dann, wenn man 0 0 0 eingibt, der Reihe nach berechnet werden.
Nun wollte ich einen Vektor schreiben, in dem die Automaten gesammelt werden. Hier mein Konstruktor für Automat:Automat::Automat(const int k1, const int m1, const int n1) : k(k1) // Konstruktor , m(m1) , n(n1) , Qa(m1) , Delta(n1, vector<int>(3)) { };In der main-Methode lege ich nun oben genannten Vektor an:
vector<Automat> automaten;Dann wird die Eingabe abgefragt, und ggf. ein neuer Automat angelegt:
Automat *automat = new Automat(k,m,n);Über verschiedene Funktionen werden dann Werte in den Automaten eingetragen:
automat->insertQa(automat, qa, mcount);Danach wollte ich den Automaten auf den Vektor legen:
automaten.push_back(automat);aber dann meckert der Compiler immer mit folgender Fehlermeldung:
46 main.cpp no matching function for call to `std::vector<Automat, std::allocator<Automat> >::push_back(Automat*&)'
note stl_vector.h:557 candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Automat, _Alloc = std::allocator<Automat>]Wo liegt mein Fehler, und wie müsste es richtig heißen?
Vielen Dank für Eure Hilfe, Ozzy
-
Du hast einen vector<Automat> und willst dort Zeiger reinpacken - das ist der Fehler. Also entweder du verwendest einen vector<Automat*> oder du verwendest Stack-Objekte (letzteres ist sicherer):
vector<Automat> automaten; ... Automat automat(k,m,n); automat.insertQa(automat, qa, mcount); ... automaten.push_back(automat);
-
Ok, soweit, so gut. Jetzt habe ich aber folgendes, wenn auch wahrscheinlich triviales Problem:
nach der While-Schleife soll ja die Berechnung durchgeführt werden. Dafür habe in in der Klasse Automat die Funktion:
void Automat::ausdruck(Automat automat){...Doch wie kann ich die jetzt aus der main-Methode aufrufen, wenn ich nicht
automat.ausdruck(automaten[i])schreiben kann, da ich ja Qausi das Objekt automat nicht mehr habe?
MfG, Ozzy
-
Ozzy schrieb:
nach der While-Schleife soll ja die Berechnung durchgeführt werden. Dafür habe in in der Klasse Automat die Funktion:
void Automat::ausdruck(Automat automat){...Sind an dieser Berechnung zwei Automaten beteiligt, oder wozu brauchst du den Parameter?
-
Ozzy schrieb:
Doch wie kann ich die jetzt aus der main-Methode aufrufen, wenn ich nicht
automat.ausdruck(automaten[i])schreiben kann, da ich ja Qausi das Objekt automat nicht mehr habe?
MfG, Ozzy
Du hast doch noch genug andere Automaten zur Auswahl, die du verwenden kannst - die stehen alle in deinem Vektor:
automaten[i].ausdruck(automaten[j]); //woher du i und j bekommst, hängt von deinem Problem abUnd MFK's Frage würde mich auch interessieren.
-
Hi,
ich dachte anfangs mal, ich müsste der Funktion den Automaten mit übergeben, was natürlich schwachsinn ist, wenn die Funktion ja auf dem Automaten aufgerufen wird... Muss also weg; danke für den Hinweis.
Ich denke, dann bekomme ich das jetzt hin. Vielen Dank noch einmal!!!
MfG, Ozzy