我定义了一个类“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);
如何让这两者共存?
答案 0 :(得分:3)
没有理由将explicit
放在这里。 explicit
的工作是阻止隐式转换,但您不进行转换 - 您只需复制即可。去掉它。只有具有不同类型参数的单参数构造函数才需要它,而不是类类型本身。
无论如何,C ++中通常的习惯是接受引用(除非你明确需要副本),这也适用于基于范围的for循环:
for(auto const& e : config.zone.values())
// do whatever with 'e'
答案 1 :(得分:0)
您需要从复制构造函数中删除显式。或者您可以通过引用传递您的自动值...
for(auto&amp; value:container)...