Compilerfehler C2327
"symbol" : ist kein Typname, statischer oder Enumerator.
Code in einer geschachtelten Klasse versucht, auf ein Element der eingeschlossenen Klasse zuzugreifen, bei dem es sich nicht um einen Typnamen, ein statisches Element oder einen Enumerator handelt.
Beim Kompilieren mit /clr ist eine häufige Ursache für C2327 eine Eigenschaft mit demselben Namen wie der Eigenschaftstyp.
Im folgenden Beispiel wird C2327 generiert:
// C2327.cpp
int x;
class enclose {
public:
int x;
static int s;
class inner {
void f() {
x = 1; // C2327; enclose::x is not static
s = 1; // ok; enclose::s is static
::x = 1; // ok; ::x refers to global
}
};
};
C2327 kann auch auftreten, wenn der Name eines Typs durch den Namen eines Elements ausgeblendet ist:
// C2327b.cpp
class X {};
class S {
X X;
// try the following line instead
// X MyX;
X other; // C2327, rename member X
};
C2327 kann auch in dieser Situation ausgelöst werden, in der Sie den Datentyp des Parameters vollständig angeben müssen:
// C2327c.cpp
// compile with: /c
struct A {};
struct B {
int A;
void f(A a) { // C2327
void f2(struct A a) {} // OK
}
};
Im folgenden Beispiel wird C2327 generiert:
// C2327d.cpp
// compile with: /clr /c
using namespace System;
namespace NA {
public enum class E : Int32 {
one = 1,
two = 2,
three = 3
};
public ref class A {
private:
E m_e;
public:
property E E {
NA::E get() {
return m_e;
}
// At set, compiler doesn't know whether E is get_E or
// Enum E, therefore fully qualifying Enum E is necessary
void set( E e ) { // C2327
// try the following line instead
// void set(NA::E e) {
m_e = e;
}
}
};
}
Das folgende Beispiel zeigt C2327, wenn eine Eigenschaft denselben Namen wie der Eigenschaftstyp hat:
// C2327f.cpp
// compile with: /clr /c
public value class Address {};
public ref class Person {
public:
property Address Address {
::Address get() {
return address;
}
void set(Address addr) { // C2327
// try the following line instead
// set(::Address addr) {
address = addr;
}
}
private:
Address address; // C2327
// try the following line instead
// ::Address address;
};