Freigeben über


Compilerwarnung (Stufe 2) C4356

Aktualisiert: November 2007

Fehlermeldung

'Member': Statischer Datenmember darf nicht über eine abgeleitete Klasse initialisiert werden
'member' : static data member cannot be initialized via derived class

Die Initialisierung eines statischen Datenmembers wurde nicht ordnungsgemäß formatiert. Die Initialisierung wurde vom Compiler akzeptiert.

Hierbei handelt es sich um eine wichtige Änderung im Visual C++ .NET 2003-Compiler. Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.

Bei Code, der in allen Versionen von Visual C++ die gleiche Funktionsweise hat, initialisieren Sie den Member durch die Basisklasse.

Verwenden Sie das warning-Pragma, um diese Warnung zu unterdrücken.

Im folgenden Beispiel wird C4356 generiert:

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