QVector discard Qualifiers



  • Ich verstehe irgendwie gerade nicht den Fehler den ich habe. Hier mein Code.

    Das Struct

    struct Cell
        {
            int sizeX;
            int sizeY;
            QSharedPointer<Objects> object;
            QSharedPointer<LayoutImpl> layout;
        };
    

    Hier meckert er

    GridLayout::GridLayout(int rows, int columns)
    {
        _rows = rows;
        _columns = columns;
    
        for (int i = 0; i < _cells.size(); i++)
        {
            for (int j = 0; j < _cells.at(i).size(); j++)
            {
                Cell cell;
                _cells.at(i).insert(j, cell);
            }
        }
    }
    

    Das ist die Fehlermeldung

    /home/ben/QtProjects/Kaipan/engine/layout/gridlayout.cpp:15: Fehler: passing ‘const QVectorGridLayout::Cell’ as ‘this’ argument discards qualifiers [-fpermissive]
    _cells->at(i).insert(j, cell);

    Keine Ahnung was er von mir will, da ich nichts als const angegeben habe. Ich will einfach nur ein Cell Struct in einen 2D Vector einfügen. Kann mir bitte jemand helfen?



  • Wie ist denn '_cells' deklariert? Laut Fehlermeldung wohl als

    const QVector<GridLayout::Cell> _cells;
    


  • Nein eben nicht. Ich wundere mich deswegen auch so. Hab das mehrmals überprüft. Ist nur als private deklariert und in der Zeile steht nur

    QVector<QVector<Cell>> _cells;



  • Ha, ich habe den Fehler gefunden - schau mal bei QVector die Funktionsdeklaration von 'at' an. 😉
    Benutze daher den Index-Operator!

    Es wäre sogar performanter, wenn du vor der inneren Schleife dir eine Referenz auf den QVector einmalig holst...



  • Th69 schrieb:

    Ha, ich habe den Fehler gefunden - schau mal bei QVector die Funktionsdeklaration von 'at' an. 😉
    Benutze daher den Index-Operator!

    Es wäre sogar performanter, wenn du vor der inneren Schleife dir eine Referenz auf den QVector einmalig holst...

    Oh man, jetzt sehe ichs auch. Danke. Jetzt ist der Fehler natürlich behoben.


Log in to reply