Error del compilador C3894

Actualización: noviembre 2007

Mensaje de error

'variable': el uso del valor L del miembro de datos estático initonly solamente se permite en el constructor de clase de la clase 'clase'
'var' : l-value use of initonly static data member is only allowed in the class constructor of class 'class'

Los miembros de datos initonly estáticos sólo se pueden utilizar como valores L en su punto de declaración o en un constructor estático.

Los miembros de datos initonly (no estáticos) de instancias sólo se pueden utilizar como valores L en su punto de declaración o en constructores (no estáticos) de instancias.

El ejemplo siguiente genera el error C3894:

// C3894.cpp
// compile with: /clr
ref struct Y1 {
   initonly static int data_var = 0;

public:
   // class constructor
   static Y1() {
      data_var = 99;   // OK
      System::Console::WriteLine("in static constructor");
   }

   // not the class constructor
   Y1(int i) {
      data_var = i;   // C3894
   }

   static void Test() {}

};

int main() {
   Y1::data_var = 88;   // C3894
   int i = Y1::data_var;
   Y1 ^ MyY1 = gcnew Y1(99);
   Y1::Test();
}