我定义了一个类“ 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'