交换操作错误:将类型'const vector <...>'的绑定值引用到类型'vector <...>'的引用将丢弃'const'限定词

时间:2020-10-04 11:36:33

标签: c++ stdvector

我有一个返回const std::vector的类方法:

class TriangleMesh
{
public:
    const std::vector<Vec3i>& indices()  const { return m_indices; };
private:
    std::vector<Vec3i> m_indices;
};

我正在通过另一个结构调用上述方法并执行swap操作:

struct Contour3D {
    std::vector<Vec3i> faces3;
    
    // ...
    Contour3D(TriangleMesh &&trmesh);
    
};

Contour3D::Contour3D(TriangleMesh &&trmesh)
{
    faces3.swap(trmesh.indices()); // => error: binding value of type 'const vector<...>' to reference to type 'vector<...>' drops 'const' qualifier
}

但是我在swap语句中收到此错误:

错误:将类型为'const vector <...>'的绑定值引用为类型为'vector <...>'的引用会丢弃'const'限定符

我不知道如何避免上述错误。

一个选项

一个选择是通过使用循环来避免swap。到目前为止,我想出了这个循环,但是我感觉好像缺少了一些东西。我在这里缺少的东西:

Contour3D::Contour3D(TriangleMesh &&trmesh)
{
    faces3.reserve(trmesh.indices().size());

    std::copy(trmesh.indices().begin(), trmesh.indices().end(),
              std::back_inserter(faces3));
}

1 个答案:

答案 0 :(得分:0)

由于@Yksisarvinen,此语句可以正常工作:

faces3 = trmesh.indices();