Compiler Error C3366

'variable' : static data members of managed types must be defined within the class definition

You attempted to reference a static member of a .NET class or interface outside the definition of that class or interface.

The compiler needs to know the full definition of the class (to emit the meta-data after one pass) and requires static data members to be initialized within the class.

For example, the following example generates C3366:

// C3366.cpp
// compile with: /clr /c
ref class X {
   public:
   static int i;   // initialize i here to avoid C3366
};

int X::i = 5;      // C3366

The following example generates C3366:

// C3366_b.cpp
// compile with: /clr:oldSyntax /c
__gc struct X {
   static int i;   // initialize i here to avoid C3366
};

int X::i = 5;      // C3366