C++ 交换操作错误:绑定值类型为';常量向量<&燃气轮机';引用类型';向量<&燃气轮机';下降';常数';合格者
我有一个类方法,它返回C++ 交换操作错误:绑定值类型为';常量向量<&燃气轮机';引用类型';向量<&燃气轮机';下降';常数';合格者,c++,stdvector,C++,Stdvector,我有一个类方法,它返回const std::vector: 类三角网格 { 公众: const std::vector&index()const{return m_index;}; 私人: std::向量m_指数; }; 我正在通过另一个结构调用上述方法,并执行swap操作: struct-Contour3D{ std::向量面3; // ... 轮廓3D(三角网格和三角网格); }; 轮廓3D::轮廓3D(三角网格和trmesh) { faces3.swap(trmesh.indexs())
const std::vector
:
类三角网格
{
公众:
const std::vector&index()const{return m_index;};
私人:
std::向量m_指数;
};
我正在通过另一个结构调用上述方法,并执行swap
操作:
struct-Contour3D{
std::向量面3;
// ...
轮廓3D(三角网格和三角网格);
};
轮廓3D::轮廓3D(三角网格和trmesh)
{
faces3.swap(trmesh.indexs());//=>错误:将“const vector”类型的值绑定到对“vector”类型的引用会删除“const”限定符
}
但我在swap
语句中收到此错误:
错误:将“const vector”类型的值绑定到对“vector”类型的引用会删除“const”限定符
我不知道如何避免上述错误
一种选择
一种选择是通过使用循环来避免交换
。到目前为止,我想出了这个循环,但我觉得我错过了一些东西。我缺少的是:
Contour3D::Contour3D(三角网格和trmesh)
{
面3.保留(trmesh.index().size());
复制(trmesh.index().begin(),trmesh.index().end(),
标准:背面插入器(面3);
}
多亏@Yksisarvinen,这句话很好用:
faces3=trmesh.index();
您不能将const
包含到swap()
操作中,该操作将尝试对其进行变异。这就是编译器抱怨rightfulls的原因。@πάνταῥεῖ 循环是否可以替代swap
?faces3=trmesh.index()有什么问题吗代码>?由于这是构造函数,faces3
可能还是空的。或者更好的是,使用So,大概你想利用tremesh
即将过期的事实,只是劫持(移动)它的向量而不是复制?