0

ご覧のとおり、私のクラスには 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' の割り当て

私の愚かなやり方を私から解き放ってください。

4

1 に答える 1

1

コピー コンストラクターを含むコンストラクターは、インスタンス メンバー、つまりそうでないメンバーを設定する必要がありstaticます。静的メンバーはすべてのインスタンスで共有されるため、コンストラクターの外部で初期化する必要があります。

あなたの場合、削除する必要があります

_USI_BITS = other._USI_BITS;

行: 両側が同じstaticメンバーを参照しているため、代入は無効です。

コピー コンストラクターの残りの部分は問題ありません。コピー コンストラクターがリソースを割り当てるため、3 つのルールにより、カスタム代入演算子とカスタム デストラクタを追加する必要があることに注意してください。

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