You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:36:03