我定义了一个类“ eventZone”,该类在我的类“配置”中使用

class configuration { ... QMap<QString, eventZone> zones ... }

直到最近我成功地使用了for循环,如锯

for(eventZone evz : config.zone.values()) { ... }


但是,这不起作用,因为我为eventZone实现了副本构造函数(需要对其进行序列化并能够保存配置)

我得到的错误是

/home/.../zonedisplay.cpp:43: erreur : no matching function for call to 'eventZone::eventZone(eventZone&)'


我的新构造函数的类型为:

explicit eventZone(const eventZone &cpy);


如何使这两个并存?

最佳答案

没有理由将explicit放在这里。 explicit的工作是防止隐式转换,但是您不进行转换-只是复制。去掉它。只有参数类型与类类型本身不同的单参数构造函数才需要使用它。

无论如何,C ++中通常的习惯用法是获取引用(除非您明确需要副本),这也适用于基于范围的for循环:

for(auto const& e : config.zone.values())
  // do whatever with 'e'

10-08 15:07