首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改QSet的元素?

如何修改QSet的元素?
EN

Stack Overflow用户
提问于 2014-06-27 09:07:32
回答 2查看 924关注 0票数 3

我有QSet<QuadPattern> texture;,我希望在一个循环中修改所有QuadPattern。

foreach不是一个好的解决方案,因为它可以复制。

使用此代码:

QMutableSetIterator it(纹理);while (it.hasNext()) { it.next();it.value().setCoordinate(.);}

我得到一个编译错误:

代码语言:javascript
复制
error: C2662: 'QuadPattern::setCoordinate' : cannot convert 'this' pointer from 'const QuadPattern' to 'QuadPattern &'
Conversion loses qualifiers

函数setCoordinate如下所示:

内联空setCoordinate(const::偶数和值){ _coordinate = value;}

为什么会有这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-27 09:22:11

错误是因为您试图修改由函数返回的对象。

我相信您不能以这种方式修改您的集合的项,因此没有这样的API。您需要修改所有项,只需清除集合并再次插入新项。

票数 6
EN

Stack Overflow用户

发布于 2014-06-27 15:36:50

QMutableSetIterator::value()有一个很好的理由返回一个const引用。集合中的项根据哈希值进行内部索引。如果您想要更改该项,通常需要删除并重新插入它。如果希望避免复制数据,请将QuadPattern设置为隐式共享类:

代码语言:javascript
复制
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 = ...; }
  ...
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24448001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档