Kontenery std::vector i QVector

0

piszę sobie program i mam taki kod

class MyDataModel
{
public:
    MyDataModel();

    void setLiczba1(QString _liczba1);
    void setDzialanie(QString _dzialanie);
    void setLiczba2(QString _liczba2);
    void setZnak(QString _znak);
    void setWynik(QString _wynik);

    QString getLiczba1() const;
    QString getDzialanie() const;
    QString getLiczba2() const;
    QString getZnak() const;
    QString getWynik() const;

private:
    QString liczba1;
    QString dzialanie;
    QString liczba2;
    QString znak;
    QString wynik;
};

gdzieś w kodzie tworzę obiekt typu MyDataModel

MyDataModel Data;

QVector<MyDataModel> myData;
std::vector<> myData2;

później tworzę vector na obiekty typu MyDataModel

MyDataModel Data;

myData2.push_back(Data); //std::vector
myData.push_back(Data); //QVector

i teraz zadaję właściwe pytanie - DLACZEGO gdy odwołuję się do funkcji składowej at() klasy QVector to nie mogę odwołać się do składowych funkcji klasy MyDataModel zaczynających się na set

myData.at(0).set....BRAK //QVector

a jak użyję zapisu tablicowego, to działa

myData[0].setLiczba1("5"); //QVector

natomiast dziwi mnie, to, że gdy użyję std::vector to oba zapisy działają

myData2.at(0).setLiczba1("5"); //std::vector
myData2[0].setLiczba1("5"); //std::vector

czy może ktoś to wyjaśnić ?

3

Wystarczy czytać dokumentację: QVector::at() ma przeładowanie tylko dla const this i zwraca const referencję.

Swoją drogą, wyrażaj się precyzyjniej. "Nie działa" implikowało, że się kompiluje, tylko setter nie ma efektu, przez co szukałem przeładowania zwracającego kopię.

I tak BTW: jeśli to rzeczywista klasa, to czemu nie użyjesz struktury?

0

@kq:

I tak BTW: jeśli to rzeczywista klasa, to czemu nie użyjesz struktury?

szczerze ? Jak wygląda struktura ?

1
struct MyDataModel
{
    QString liczba1;
    QString dzialanie;
    QString liczba2;
    QString znak;
    QString wynik;
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0