Compiler Error C3379

'class' : a nested class cannot have an assembly access specifier as part of its declaration

When applied to a managed type, such as class or struct, the public and private keywords indicate whether the class will be exposed through assembly metadata. public or private cannot be applied to a nested class, which will inherit the assembly access of the enclosing class.

When used with /clr, the ref and value keywords indicate that a class is managed (see Classes and Structs (C++ Component Extensions)).

The following sample generates C3379:

// C3379a.cpp
// compile with: /clr
using namespace System;

public ref class A {
public:
   static int i = 9;

   public ref class BA {   // C3379
   // try the following line instead
   // ref class BA {
   public:
      static int ii = 8;
   };
};

int main() {

   A^ myA = gcnew A;
   Console::WriteLine(myA->i);

   A::BA^ myBA = gcnew A::BA;
   Console::WriteLine(myBA->ii);
}

The following sample generates C3379:

// C3379b.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>

public __gc class A {
public:
   static int i = 9;

   public __gc class BA {   // C3379
   // try the following line instead
   // __gc class BA {
   public:
      static int ii = 8;
   };
};

int main() {

   A *myA = new A;
   Console::WriteLine(myA->i);

   A::BA *myBA = new A::BA;
   Console::WriteLine(myBA->ii);
}