Compartilhar via


Erro do compilador C2885

'class::identifier': não é uma declaração using válida em escopo diferente de classe

Você usou uma declaração using incorretamente.

Esse erro pode ser gerado como resultado do trabalho de conformidade do compilador que foi feito no Visual Studio 2005: não é mais válido ter uma declaração using para um tipo aninhado; você deve qualificar explicitamente cada referência feita para o tipo aninhado, colocar o tipo em um namespace ou criar um typedef.

Exemplos

A amostra a seguir gera o erro 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;
}

Se você usar a palavra-chave using com um membro de classe, o C++ exigirá que você defina esse membro dentro de outra classe (uma classe derivada).

A amostra a seguir gera o erro 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;
};