复制构造函数在对象数组的列表初始化中不起作用

Copy Constructor not working in List initialization of array of objects

提问人:g0x0 提问时间:9/3/2021 最后编辑:g0x0 更新时间:9/3/2021 访问量:106

问:

每当我为一个类制作自己的复制构造函数时,列表初始化就会停止工作,并且我收到错误:类“蝙蝠侠”没有合适的复制构造函数

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")};
                       ^         ^
                      error     error

每当我删除我的复制构造函数时,它都会再次开始工作

解决:

问题出在列表初始化中,复制构造函数需要是常量,并且由于我有一个自定义复制构造函数,它覆盖了常量构造函数

使我的 CC const 解决了这个问题

        Batman(const Batman&){
            counter();
        }
C++ 数组类 copy-constructor

评论

1赞 Ghasem Ramezani 9/3/2021
您没有定义静态变量。尝试一下你的班级。Batman::cntint Batman::cnt = 0;
0赞 g0x0 9/3/2021
@GhasemRamezani我在某个地方有,NVM解决了这个问题
3赞 Sebastian Hoffmann 9/3/2021
复制构造函数应采用常量引用,即 .这里的问题是您正在尝试复制临时对象,这是不可能的,因为它们没有绑定到 .查看 en.cppreference.com/w/cpp/language/copy_constructorBatman::Batman(const Batman& other)Batman&
1赞 Ghasem Ramezani 9/3/2021
@SebastianHoffmann,顺便说一句,是一个有效的复制构造函数:eel.is/c++draft/class.copy.ctorT::T(T&);
1赞 Phil1970 9/3/2021
@GhasemRamezani 虽然在某些情况下在技术上是有效的和可用的,但定义这样的复制构造函数是一种不好的做法,因为 (1) 代码的用户不希望副本修改原始对象,并且 (2) 如果遵循指南尽可能使用,那么他很快就会遇到复制对象的问题。const

答: 暂无答案