Partager via


Avertissement du compilateur (niveau 2) C4356

Mise à jour : novembre 2007

Message d'erreur

'membre' : les données membres static ne peuvent pas être initialisées via une classe dérivée
'member' : static data member cannot be initialized via derived class

L'initialisation d'un membre de données static était incorrecte. Le compilateur a accepté l'initialisation.

Cela constitue un changement majeur dans le compilateur Visual C++ .NET 2003. Pour plus d'informations, consultez Récapitulatif des modifications sans rupture au moment de la compilation.

Pour obtenir un code qui fonctionne de la même manière dans toutes les versions de Visual C++, initialisez le membre par l'intermédiaire de la classe de base.

Utilisez le pragma warning pour supprimer cet avertissement.

L'exemple suivant génère l'erreur 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;
}