3

これは私が直面している奇妙な問題です - おそらく私のさびたC++スキルを考えると超基本的なものですが、私はまだ困惑しています:

  • 私はクラスを持っています
  • このクラスには の配列もありunsigned long longます - それを呼び出しましょうarr

私のクラスインターフェース:

typedef unsigned long long U64;

class DQClass
{
    public:
        DQClass (void);
        virtual ~DQClass (void);

        U64 arr[12];
};

さて、実装ですが…

テスト1(これは機能します):

DQClass::DQClass (void)
{
        this->arr[0] = 0x8100000000000000ULL;
        this->arr[1] = 0x4200000000000000ULL;

        // and so on..
}

テスト 2 (これはありません) :

DQClass::DQClass (void)
{
    this->arr = 
    {
        0x8100000000000000ULL,
        0x4200000000000000ULL,
        0x2400000000000000ULL,
        0x1000000000000000ULL,
        0x0800000000000000ULL,
        0x00FF000000000000ULL,
        FLIPV(0x8100000000000000ULL),
        FLIPV(0x4200000000000000ULL),
        FLIPV(0x2400000000000000ULL),
        FLIPV(0x1000000000000000ULL),
        FLIPV(0x0800000000000000ULL),
        FLIPV(0x00FF000000000000ULL)
    };
}

エラー :

dqclass.cpp: In constructor ‘DQClass::DQClass()’:
dqclass.cpp:28: error: expected primary-expression before ‘{’ token
dqclass.cpp:28: error: expected `;' before ‘{’ token

なぜこれが機能しないのですか?たとえば、同じように機能するべきではありませんU64 someArr[12] = {0,1,2,3,4,5,6,7,8,9,10,11}か?

何か案は?

4

1 に答える 1

6

配列はそのように(または他の方法で)割り当てることはできず、初期化されるだけです:

 // sorry for bad formatting
DQClass::DQClass (void)
: arr(
    {
        0x8100000000000000ULL,
        0x4200000000000000ULL,
        0x2400000000000000ULL,
        0x1000000000000000ULL,
        0x0800000000000000ULL,
        0x00FF000000000000ULL,
        FLIPV(0x8100000000000000ULL),
        FLIPV(0x4200000000000000ULL),
        FLIPV(0x2400000000000000ULL),
        FLIPV(0x1000000000000000ULL),
        FLIPV(0x0800000000000000ULL),
        FLIPV(0x00FF000000000000ULL)
    }) {
}

コンストラクタ初期化リストを使用します。


次を使用することもできますstd::array

std::array<U64, 12> arr;

// ...

this->arr = 
    {{
        0x8100000000000000ULL,
        0x4200000000000000ULL,
        0x2400000000000000ULL,
        0x1000000000000000ULL,
        0x0800000000000000ULL,
        0x00FF000000000000ULL,
        FLIPV(0x8100000000000000ULL),
        FLIPV(0x4200000000000000ULL),
        FLIPV(0x2400000000000000ULL),
        FLIPV(0x1000000000000000ULL),
        FLIPV(0x0800000000000000ULL),
        FLIPV(0x00FF000000000000ULL)
    }};
于 2012-12-13T08:18:45.593 に答える