Vector subscript out of range



  • Ich nochmal wieder,

    Ich stoße leider immer wieder auf Probleme bei denen meine Ausbilder mir leider auch nicht helfen können. Ich erstelle im moment eine Dynamische Checklist, funktioniert alles super. Er übernimmt auch alles brav, aber sobald ich denn Checkboxen erstellen will streikt er mit folgendem Fehler:

    Expression: vector subscript out of range

    hier wir vector mit QStrings übergeben:

    void Build::ready_clicked()
    {
       QString text;
       for(int i = 0; i<qlist.size(); i++)
       {
          text = qlist[i]->text();
          points.push_back(text);
       }
       DynCheckList* dynam = new DynCheckList();
       dynam->setList(points);
       dynam->show();
       this->close();
    }
    

    Bis hier hin funktioniert es, da ich vorher einfach eine Ausgabe gemacht hatte, das wurde alles übergeben.

    DynCheckList.h:

    #ifndef DYNCHECKLIST_H
    #define DYNCHECKLIST_H
    
    #include<QWidget>
    #include<vector>
    #include<QVBoxLayout>
    #include<iostream>
    #include<QCheckBox>
    #include<QString>
    
    using namespace std;
    
    class DynCheckList : public QWidget
    {
        Q_OBJECT
    
    public:
      explicit DynCheckList(QWidget* parent = 0);
      ~DynCheckList();
      void setList(vector<QString> text);
    
    private:
      vector<QString> text;
      QVBoxLayout* layout;
    };
    
    #endif //DYNCHECKLIST_H
    

    die DynCheckList.cpp:

    #include "dynchecklist.h"
    
    DynCheckList::DynCheckList(QWidget* parent) :
       QWidget(parent)
    {
       QWidget* window = new QWidget(this);
       layout = new QVBoxLayout;
    
       QCheckBox* checkBox = new QCheckBox;
       checkBox->setText(text[0]); //Wenn ich hier einen Text in "" eingebe, geht
                                   //es, aber so bekomme ich immer den Fehler.
                                   //später will ich es in einer Schleife füllen. 
       layout->addWidget(checkBox);
    
       window->setLayout(layout);
    }
    
    DynCheckList::~DynCheckList(){}
    
    void DynCheckList::setList(vector<QString> text)
    {
       this->text = text;
    }
    

    Ich hoffe das ihr mir helfen könnt. Ich habe schon viel gegooglet und verschiedene sachen ausprobiert auch mit nem iterator, aber ich bekomme den Fehler einfach nicht weg...

    verzweifelte grüße,
    Lillith


  • Mod

    In text steht nichts drin. Du versuchst, das erste Element von Nichts zu nehmen.



  • Ich kann text aber ausgeben und dann gibt er mit die sachen aus, die ich auch übergeben haben möchte.


  • Mod

    Lillith schrieb:

    Ich kann text aber ausgeben und dann gibt er mit die sachen aus, die ich auch übergeben haben möchte.

    Glaub ich nicht, zeig mal!

    Oder genauer: Ich glaube dir zwar, dass du irgendetwas ausgibst. Aber vermutlich ganz an einer anderen Stelle, wo text eben nicht mehr leer ist.



  • Du willst den Vector dem Konstruktor übergeben:

    DynCheckList* dynam = new DynCheckList(points);
    
    ...
    
    explicit DynCheckList(const vector<QString>& text);
    

Log in to reply