编译器错误 C2885

更新:2007 年 11 月

错误消息

“class::identifier”: 在非类范围内不是有效的 using 声明

错误地使用了 using 声明。

示例

为 Visual C++ 2005 执行的编译器一致性工作可能导致此错误:对嵌套类型使用 using 声明不再有效;必须显式限定对嵌套类型的每个引用、将类型放入命名空间或创建 typedef。有关更多信息,请参见 Visual C++ 2005 编译器中的重大更改

下面的示例生成 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;
};