C++ for(自动e:xxx)与构造函数冲突

C++ for(自动e:xxx)与构造函数冲突,c++,qt,c++11,C++,Qt,C++11,我定义了一个类“eventZone”,它用于我的类“configuration” 类配置{…QMap区域…} 直到不久前,我成功地使用了一种类似for环的锯 for(eventZone evz : config.zone.values()) { ... } 但是,这不起作用,因为我为eventZone实现了一个复制构造函数(需要序列化它并能够保存配置) 我得到的错误是 /home/.../zonedisplay.cpp:43: erreur : no matching function for

我定义了一个类“eventZone”,它用于我的类“configuration”

类配置{…QMap区域…}

直到不久前,我成功地使用了一种类似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);

如何使这两者共存?

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


对于(auto&value:container).

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


对于(auto&value:container).

没有理由在此处放置
explicit
explicit
的工作是防止隐式转换,但你不转换,你只是复制。移除它。它只适用于具有不同于类类型本身的参数类型的单参数构造函数

P> >通常,C++中的惯用习惯是引用(除非你明确需要拷贝),并且也适用于基于循环的范围:

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

没有理由把
显式
放在这里
explicit
的工作是防止隐式转换,但你不转换,你只是复制。移除它。它只适用于具有不同于类类型本身的参数类型的单参数构造函数

P> >通常,C++中的惯用习惯是引用(除非你明确需要拷贝),并且也适用于基于循环的范围:

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

我怀疑问题在于显式的使用,这在本文中似乎是不必要的。您是否知道可以将
用于(const EventZone&e:config.zone.values())
,甚至可以将
用于(const auto&e:config.zone.values())
?我怀疑问题在于显式的使用,在本上下文中,这似乎是不必要的。您是否知道可以将
用于(const EventZone&e:config.zone.values())
,甚至可以将
用于(const auto&e:config.zone.values())