преобразовать из «const QVector‹QVector‹qreal››» в «QVector‹QVector‹qreal››»

Как я могу решить следующее, например, преобразовать const QVector<QVector<qreal>> в QVector<QVector<qreal>>?

Я попробовал несколько шагов, но не помогло:

QVector<QVector<qreal>> points = const_cast<QVector<QVector<qreal>>>(abc.points);

abc.points — это элемент структуры типа QVector<QVector<qreal>>, который я пытаюсь извлечь из QDataStream:

QDataStream& operator >> (QDataStream& in, const CustomPointCloud& abc)
{
    quint32 pointsCount = quint32(abc.pointsCount);
    QVector<QVector<qreal>> points =
        const_cast<QVector<QVector<qreal>>>(abc.points);
    in >> pointsCount >> points;
    return in;
}

person Sayan Bera    schedule 27.09.2018    source источник


Ответы (2)


<< занимает const, потому что он не изменяет параметр, тогда как весь смысл >> заключается в изменении параметра.

Вы должны изменить определение функции. Вы читаете данные из потока в локальный объект, который перестает существовать в конце функции.

QDataStream& operator >> (QDataStream& in, CustomPointCloud& abc)
{
    quint32 pointsCount;
    in >> pointsCount;
    in >> abc.points;
    return in;
}

Я бы также посоветовал вам не нуждаться в подсчете точек для извлечения потока, лежащего в основе QDataStream& >> (QDataStream&, QVector<T>&) имеет дело с этим. Тогда пара операторов будет

QDataStream& operator >> (QDataStream& in, CustomPointCloud& abc)
{
    return in >> abc.points;
}

QDataStream& operator << (QDataStream& out, const CustomPointCloud& abc)
{
    return out << abc.points;
}
person Caleth    schedule 27.09.2018
comment
Да, я обнаружил, что проблема была в const. - person Sayan Bera; 27.09.2018

Это сделал QVector<QVector<qreal>> points(abc.points);

Пожалуйста, предложите, если есть другие подходы.

person Sayan Bera    schedule 27.09.2018