C++ for(自动e:xxx)与构造函数冲突
我定义了一个类“eventZone”,它用于我的类“configuration”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
类配置{…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())
?