我的类有以下私有变量,包括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'
请愚弄我的愚蠢行为。
答案 0 :(得分:1)
构造函数(包括复制构造函数)需要设置实例成员,即不是static
的构件。静态成员由所有实例共享,因此必须在任何构造函数之外进行初始化。
在您的情况下,您需要删除
_USI_BITS = other._USI_BITS;
行:双方引用相同的static
成员,因此作业无效。
你的副本构造函数的其余部分没问题。请注意,由于复制构造函数分配资源,rule of three建议您应添加自定义赋值运算符和自定义析构函数:
BitPack& operator=(const BitPack& other) {
...
}
~BitPack() {
...
}