'symbol': 형식 이름, 정적 또는 열거자가 아닙니다.
중첩 클래스 내의 코드는 형식 이름, 정적 멤버 또는 열거자가 아닌 바깥쪽 클래스의 멤버에 액세스하려고 시도합니다.
/clr을 사용하여 컴파일할 때 C2327의 일반적인 원인은 속성 형식과 이름이 같은 속성입니다.
다음 샘플에서는 C2327을 생성합니다.
// 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은 멤버 이름으로 형식의 이름을 숨기는 경우에도 발생할 수 있습니다.
// C2327b.cpp
class X {};
class S {
X X;
// try the following line instead
// X MyX;
X other; // C2327, rename member X
};
C2327은 매개 변수의 데이터 형식을 완전히 지정해야 하는 이 상황에서도 발생할 수 있습니다.
// C2327c.cpp
// compile with: /c
struct A {};
struct B {
int A;
void f(A a) { // C2327
void f2(struct A a) {} // OK
}
};
다음 샘플에서는 C2327을 생성합니다.
// 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;
}
}
};
}
다음 샘플에서는 속성의 이름이 속성 형식과 같은 경우 C2327을 보여줍니다.
// 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;
};