컴파일러 오류 C2885
'class::identifier': 클래스가 아닌 범위에서 유효한 using-declaration이 아닙니다.
using 선언을 잘못 사용했습니다.
이 오류는 Visual Studio 2005에 대해 수행된 컴파일러 규칙 작업의 결과로 생성될 수 있습니다. 중첩된 형식에 using
대한 선언이 더 이상 유효하지 않습니다. 중첩된 형식에 대한 각 참조를 명시적으로 한정하거나, 형식을 네임스페이스에 배치하거나, typedef를 만들어야 합니다.
예제
다음 샘플에서는 C2885를 생성합니다.
// C2885.cpp
namespace MyNamespace {
class X1 {};
}
struct MyStruct {
struct X1 {
int i;
};
};
int main () {
using MyStruct::X1; // C2885
// OK
using MyNamespace::X1;
X1 myX1;
MyStruct::X1 X12;
typedef MyStruct::X1 abc;
abc X13;
X13.i = 9;
}
클래스 멤버와 함께 키워드를 using
사용하는 경우 C++에서는 다른 클래스(파생 클래스) 내에서 해당 멤버를 정의해야 합니다.
다음 샘플에서는 C2885를 생성합니다.
// C2885_b.cpp
// compile with: /c
class A {
public:
int i;
};
void z() {
using A::i; // C2885 not in a class
}
class B : public A {
public:
using A::i;
};