コンパイラの警告 (レベル 2) C4356

更新 : 2007 年 11 月

エラー メッセージ

'member' : 静的データ メンバは、派生クラスを使って初期化できません。

静的データ メンバの初期化の形式が間違っています。コンパイラは初期化を受け入れました。

これは、Visual C++ .NET 2003 コンパイラでの互換性に影響する変更点です。詳細については、「Summary of Compile-Time Breaking Changes」を参照してください。

すべてのバージョンの Visual C++ で同じ動作をするコードを作成するには、基本クラスを通じてメンバを初期化します。

この警告が表示されないようにするには、warning プラグマを使用します。

次の例では C4356 警告が生成されます。

// C4356.cpp
// compile with: /W2 /EHsc
#include <iostream>

template <class T>
class C {
   static int n;
};

class D : C<int> {};

int D::n = 0; // C4356
// try the following line instead
// int C<int>::n = 0;

class A {
public:
   static int n;
};

class B : public A {};

int B::n = 10;   // C4356
// try the following line instead
// int A::n = 99;

int main() {
   using namespace std;
   cout << B::n << endl;
}