Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 2) C4356

"składowa": nie można zainicjować składowej danych statycznych za pośrednictwem klasy pochodnej

Zainicjowanie statycznego elementu członkowskiego danych było źle sformułowane. Kompilator zaakceptował inicjowanie. Aby uniknąć ostrzeżenia, zainicjuj składową za pomocą klasy bazowej.

Użyj pragma ostrzeżenia, aby pominąć to ostrzeżenie.

Poniższy przykład generuje 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;
}