如何使用复制构造函数复制常量变量?

时间:2013-11-11 02:41:54

标签: c++

我的类有以下私有变量,包括const static变量,如您所见:

private:
    // class constant for # of bits in an unsigned short int:
    const static int _USI_BITS = sizeof(usi)*CHAR_BIT; 
    usi* _booArr;  
    int _booArrLen;
    int _numBoos;

我是使用复制构造函数的新手,我无法弄清楚如何编写一个。这是我的尝试:

BitPack::BitPack(const BitPack& other) { 
    _USI_BITS = other._USI_BITS;
    _booArr = new usi[other._booArrLen];
    for (int i = 0; i < _booArrLen; ++i)  
        _booArr[i] = other._booArr[i];
    _booArrLen = other._booArrLen;
    _numBoos = other.numBoos; 
}

编译器说:

错误:分配只读变量'BitPack :: _ USI_BITS'

请愚弄我的愚蠢行为。

1 个答案:

答案 0 :(得分:1)

构造函数(包括复制构造函数)需要设置实例成员,即不是static的构件。静态成员由所有实例共享,因此必须在任何构造函数之外进行初始化。

在您的情况下,您需要删除

_USI_BITS = other._USI_BITS;

行:双方引用相同的static成员,因此作业无效。

你的副本构造函数的其余部分没问题。请注意,由于复制构造函数分配资源,rule of three建议您应添加自定义赋值运算符和自定义析构函数:

BitPack& operator=(const BitPack& other) {
    ...
}
~BitPack() {
    ...
}