【问题标题】:convert from 'const QVector<QVector<qreal>>' to 'QVector<QVector<qreal>>'从 'const QVector<QVector<qreal>>' 转换为 'QVector<QVector<qreal>>'
【发布时间】:2019-03-02 23:34:27
【问题描述】:

如何解决以下问题,即将const QVector&lt;QVector&lt;qreal&gt;&gt; 转换为QVector&lt;QVector&lt;qreal&gt;&gt;

我尝试了几个步骤但没有帮助:

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

abc.points 是QVector&lt;QVector&lt;qreal&gt;&gt; 类型的结构元素,我试图从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;
}

【问题讨论】:

    标签: c++ casting const-cast qvector qdatastream


    【解决方案1】:

    &lt;&lt;取自const,因为它没有修改参数,而&gt;&gt;的重点是修改参数。

    你应该改变你的函数定义。您正在将流中的数据读取到一个本地对象中,该对象在函数结束时不再存在。

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

    我还建议您不需要点数来提取流,底层的QDataStream&amp; &gt;&gt; (QDataStream&amp;, QVector&lt;T&gt;&amp;) 模板会处理这个问题。这对运算符将是

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

    【讨论】:

    • 是的,我发现 const 是问题所在。
    【解决方案2】:

    完成了 QVector&lt;QVector&lt;qreal&gt;&gt; points(abc.points);

    如果有其他方法,请提出建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多