for(auto e:xxx)与构造函数冲突

时间:2012-11-07 17:37:37

标签: c++ qt c++11

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

如何让这两者共存?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

您需要从复制构造函数中删除显式。或者您可以通过引用传递您的自动值...

for(auto&amp; value:container)...