Compartir a través de


Advertencia del compilador (nivel 2) C4356

Actualización: noviembre 2007

Mensaje de error

'miembro' : no se puede inicializar el miembro de datos estático mediante una clase derivada
'member' : static data member cannot be initialized via derived class

La inicialización de un miembro de datos estático estaba mal formada. El compilador ha aceptado la inicialización.

Éste es un cambio importante en el compilador de Visual C++ .NET 2003. Para obtener más información, vea Resumen de cambios importantes en tiempo de compilación.

Para que el código funcione de igual forma en todas las versiones de Visual C++, inicialice el miembro mediante la clase base.

Utilice la directiva pragma warning para suprimir esta advertencia.

El ejemplo siguiente genera el error 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;
}