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;
}