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 ab
    

    Und 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


Anmelden zum Antworten