Compilerfehler C3379

Aktualisiert: November 2007

Fehlermeldung

'Klasse': Eine geschachtelte Klasse kann keinen Assemblyzugriffsspezifizierer als Teil ihrer Deklaration haben
'class' : a nested class cannot have an assembly access specifier as part of its declaration

Wenn die Schlüsselwörter public und private auf einen verwalteten Typ, z. B. eine Klasse oder Struktur, angewendet werden, zeigen sie an, ob die Klasse über Assemblymetadaten verfügbar gemacht wird. public oder private können nicht auf geschachtelte Klassen angewendet werden, die den Assemblyzugriff von der übergeordneten Klasse erben.

In Kombination mit /clr zeigen die Schlüsselwörter ref und value an, dass es sich um eine verwaltete Klasse handelt (siehe Classes and Structs (Managed)).

Im folgenden Beispiel wird C3379 generiert:

// 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);
}

Im folgenden Beispiel wird C3379 generiert:

// 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);
}