コンパイラ エラー C2864
'member-name': in-class initializer を持つ静的データ メンバーには、非揮発性 const integral 型が必要です
解説
volatile
、非 const
、または非整数型として定義された static
データ メンバーを初期化するには、member-definition ステートメントを使用します。 これらを宣言で初期化することはできません。
例
次の例では C2864 が生成されます。
// C2864.cpp
// compile with: /c
class B {
private:
int a = 3; // OK
static int b = 3; // C2864
volatile static int c = 3; // C2864
volatile static const int d = 3; // C2864
static const long long e = 3; // OK
static const double f = 3.33; // C2864
};
このサンプルは、C2864 を修正する方法を示しています。
// C2864b.cpp
// compile with: /c
class C {
private:
int a = 3;
static int b; // = 3; C2864
volatile static int c; // = 3; C2864
volatile static const int d; // = 3; C2864
static const long long e = 3;
static const double f; // = 3.33; C2864
};
// Initialize static volatile, non-const, or non-integral
// data members when defined, not when declared:
int C::b = 3;
volatile int C::c = 3;
volatile const int C::d = 3;
const double C::f = 3.33;