0

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

如何让这两者共存?

4

2 回答 2

3

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

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

for(auto const& e : config.zone.values())
  // do whatever with 'e'
于 2012-11-07T18:01:13.793 回答
0

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

for (auto &value : 容器) ...

于 2012-11-07T17:54:22.720 回答