Предупреждение компилятора (уровень 2) C4356
Обновлен: Ноябрь 2007
Сообщение об ошибке
"член" : статический член данных не может инициализироваться через производный класс
'member' : static data member cannot be initialized via derived class
Инициализация статического члена данных задана неправильно. Компилятор принял эту инициализацию.
Это критическое изменение в компиляторе Visual C++ .NET 2003. Дополнительные сведения см. в разделе Сводная информация о критических изменениях времени компиляции.
В коде, который функционирует одинаково во всех версиях Visual C++, следует инициализировать член через базовый класс.
Используйте директиву pragma warning для подавления этого предупреждения.
Следующий пример приводит к возникновению предупреждения 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;
}