我有QSet<QuadPattern> texture;,我希望在一个循环中修改所有QuadPattern。
foreach不是一个好的解决方案,因为它可以复制。
使用此代码:
QMutableSetIterator it(纹理);while (it.hasNext()) { it.next();it.value().setCoordinate(.);}
我得到一个编译错误:
error: C2662: 'QuadPattern::setCoordinate' : cannot convert 'this' pointer from 'const QuadPattern' to 'QuadPattern &'
Conversion loses qualifiers函数setCoordinate如下所示:
内联空setCoordinate(const::偶数和值){ _coordinate = value;}
为什么会有这个错误?
发布于 2014-06-27 09:22:11
错误是因为您试图修改由函数返回的对象。
我相信您不能以这种方式修改您的集合的项,因此没有这样的API。您需要修改所有项,只需清除集合并再次插入新项。
发布于 2014-06-27 15:36:50
QMutableSetIterator::value()有一个很好的理由返回一个const引用。集合中的项根据哈希值进行内部索引。如果您想要更改该项,通常需要删除并重新插入它。如果希望避免复制数据,请将QuadPattern设置为隐式共享类:
class QuadPatternData : public QSharedData
{
...
};
class QuadPattern {
QSharedDataPointer<QuadPatternData> d;
public:
QuadPattern() : d(new QuadPatternData) {}
QuadPattern(const QuadPattern & other) : d(other.d) {}
QuadPattern(QuadPattern && other) { d.swap(other.d); }
void setCoordinate( ... ) { d->coordinate = ...; }
...
};https://stackoverflow.com/questions/24448001
复制相似问题