编译器错误 C2885
“class::identifier”: 在非类范围内不是有效的 using 声明
你错误地使用了 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;
};