Qt QList C3892: невозможно назначить константную переменную

У меня проблема с константной корректностью с QList.

У меня есть метод getValue, подпись которого я не могу изменить, возвращая const double, и здесь

double vs = MinInput->getValue(0, 0);

против константа.

Я хотел бы создать QList с результатами этого метода, и я получаю сообщение об ошибке C3892.

Поскольку мой список представляет собой QList, я не могу добавить const double (?)

Код такой

    QList<double> minmax;
    for (int i = 0; i < 2*(3+othercutoffs_var_len) ; i++  )
        minmax.append( 0.0 );


    QSP< const VarInterface<double> > MinInput = ctx.getInputVar<double>(ctx.input(Id::fromString(QL1s("Min")))[0] );
    const double vs = MinInput->getValue(0, 0);
    minmax.at(0) = vs;

и эта самая последняя строка кода вызывает у меня проблемы. (другие ошибки при заполнении списка другими подобными const double)

подпись для getValue такая

const TYPE & VarData<TYPE>::getValue( uint r, uint c ) const

person kiriloff    schedule 11.04.2013    source источник


Ответы (2)


Я предполагаю, что правильный код будет:

minmax[0] = vs;

Обновлять:

QList::at возвращает ссылку const, которую нельзя изменить.

person Amartel    schedule 11.04.2013
comment
почему это не делается с at() ? - person kiriloff; 11.04.2013
comment
Потому что QList::at возвращает ссылку const, которую нельзя изменить. Подпись: const T & QList::at ( int i ) const - person Amartel; 11.04.2013
comment
QList использует индексы, начинающиеся с 0, как и массивы C++. Чтобы получить доступ к элементу в определенной позиции индекса, вы можете использовать оператор [](). В неконстантных списках operator[]() возвращает ссылку на элемент и может использоваться в левой части присваивания: - person Lwin Htoo Ko; 11.04.2013

QList::at(int i) — это геттерная функция. Он возвращает ссылку const, и вы ничего не можете ему присвоить.

Используйте QList::operator[](int i) или QList::replace(int i, const & T value), чтобы установить значение в позиции i.

person PrisonMonkeys    schedule 11.04.2013