0

如您所见,我的类有以下私有变量,包括一个 const 静态变量:

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”

请摒弃我愚蠢的做法。

4

1 回答 1

1

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

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

_USI_BITS = other._USI_BITS;

line:两边指的是同一个static成员,所以赋值无效。

您的复制构造函数的其余部分都很好。请注意,由于您的复制构造函数分配资源,三规则建议您应该添加自定义赋值运算符和自定义析构函数:

BitPack& operator=(const BitPack& other) {
    ...
}
~BitPack() {
    ...
}
于 2013-11-11T02:46:26.027 回答