C++自定义拷贝构造函数导致对象数组列表初始化失败解决方案
问题复现
为自定义类编写拷贝构造函数后,使用列表初始化方式初始化对象数组时运行失败,收到报错:类"Batman"没有合适的拷贝构造函数。
出错的类定义代码:
class Batman{ private: dhaga real_name; long double moneys; public: static int cnt; dhaga batamobile; auto counter() -> void{ cnt++; } Batman(dhaga name):real_name(name){ counter(); } Batman(){ counter(); } Batman(Batman&){ counter(); } };
初始化代码:
Batman bruce[2] = {Batman(), Batman("bruce wayne")}; ^ ^ 报错位置 报错位置
异常现象:删除自定义的拷贝构造函数后,初始化逻辑可正常运行。
问题原因
列表初始化过程中调用的拷贝构造函数要求参数为常量引用,自定义的非const引用参数的拷贝构造函数覆盖了编译器默认生成的带const参数的拷贝构造函数,因此无法匹配调用。
解决方案
将自定义拷贝构造函数的参数修改为const引用即可解决问题:
Batman(const Batman&){ counter(); }
内容的提问来源于stack exchange,提问作者g0x0
相关产品推荐
相关产品推荐

