Problem mit Array in Konstruktor



  • Die lokalen Variablen, die du im Konstruktor anlegst, verdecken deine Member. Ist vermutlich nicht beabsichtig.

    Und warum bekommt deine insertQa-Methode einen Zeiger auf Automat mit? Wäre es nicht sinnvoller, wenn sie das, was sie tut, mit dem Objekt tun würde, zu dem sie gehört?



  • Ozzy schrieb:

    Aber wie kann ich nun etwas in die Array einfügen? Mein Compiler sagt mir immer:
    [...]

    Hm. Ich frage mich grad ob das ein Fortschritt oder Rückschritt gegenüber den Leuten die keine Fehlermeldungen liefern ist.

    // Automat.hpp
    
    class Automat
    {
      //...
      std::vector<int>  Qa;
      std::vector<std::vector<int> >  Delta;
    };
    
    // Automat.cpp
    
    using std::vector;
    
    Automat::Automat(const int k1, const int m1, const int n1)
      : k(k1)
      , m(m1)
      , n(n1)
      , Qa(m1)
      , Delta(n1, vector<int>(2))
    {
    /* Das sind lokale Variablen, nicht deine Member!
        int k=k1;
        int m=m1;
        int n=n1;                                                
        int Qa[m];
        int Delta[n][2];
    */
    };
    


  • Die Anzahl der Array-Elemente muss ein konstanter Ausdruck sein.
    Für eine dynamische Speicherverwaltung benutze lieber vektoren oder halt Pointer auf Arrays.



  • Also kein Array sondern lieber Verktoren; sehe ich das richtig?
    Schade, dabei wäre es mit Array's so schön gewesen...

    Noch eine Frage: wie schreibe ich denn in einen Vektor in einem Vektor? So etwas habe ich noch nie gemacht...

    MfG, Ozzy



  • Hallo

    std::vector<std::vector<int> > myarray; // Leerzeichen zwischen den > > beachten!
    myarray.push_back(std::vector<int>());
    

    bis bald
    akari



  • Dann muss ich mir also einen "Hilfsvektor" bauen, den vollmachen, und dann den ganzen Vektor in den "äußeren" Vektor schieben?

    MfG, Ozzy



  • typedef std::vector<int> Int1D;
    typedef std::vector<Int1D> Int2D;
    
    Int2D nullmatrix(10, Int1D(10,0));
    
    // bzw.
    
    for (int i = 0; i < nullmatrix.size(); i++) {
        for (int j = 0; j < nullmatrix[i].size(); j++)
            nullmatrix[i][j] = 1;
    }
    


  • Automat::Automat(const int k1, const int m1, const int n1)
      : k(k1)
      , m(m1)
      , n(n1)
      , Qa(m1)
      , Delta(n1, vector<int>(2)) // <--- erstellt ein n1*2 Array
    {
    };
    


  • Hi,

    kann mir jemand von Euch sagen, warum das (anscheinend) nicht funktioniert:

    void Automat::Automat::insertDelta(Automat *automat, vector<int> Zustand) {
         automat->Delta.push_back(Zustand);
    };
    

    Zumindest hatte ich probiert, mit:

    void Automat::ausgeben(Automat *automat) {
         cout << automat->Delta[0][0] << " " << automat->Delta[0][1] << " " << automat->Delta[0][2] << endl << endl;
    };
    

    mir etwas ausgeben zu lassen, aber ich bekomme immer nur 0 0 0 raus. Der Vector Zustand wir der insertDelta aber richtig übergeben, das hatte ich schon ausprobiert.

    MfG, Ozzy



  • Kannst du sagen, warum du innerhalb von Automat offenbar noch einen Typ Automat hast? Und warum offenbar alle deine Memberfunktionen auf dem übergebenen Automat-Zeiger arbeiten statt auf this?



  • Nein, das kann ich Dir leider nicht sagen 😉

    Aber ist das eine Erklärung für die Frage?
    MfG, Ozzy



  • Wie sieht denn dein tatsächlicher Code jetzt aus? Und warum weißt du nicht was du machst?



  • Hi,

    Scherz beiseite, ich hatte einfach nicht dran gedacht. Nun habe ich this-> statt automat-> genommen, aber das löst nicht mein Problem. Hast Du vielleicht noch eine Idee?

    MfG, Ozzy



  • Hi,

    ich habe es jetzt selbst herausgefunden; ich dachte, ich müsse ein push_back auf dem Vektor ausführen, deshalb wurden meine Elemente immer nur hinten dran gehängt, und somit kam natürlich bei der Abfrage der ersten Elemente immer nur 0 0 0 raus.
    Mit der Zuweisung aber funktioniert es jetzt.

    Trotzdem vielen Dank, Ozzy


Anmelden zum Antworten