Partager via


Erreur du compilateur C2885

'class ::identifier' : non une déclaration d’utilisation valide au niveau de l’étendue non classe

Vous avez utilisé une déclaration using de manière incorrecte.

Cette erreur peut être générée suite au travail de conformité du compilateur qui a été effectué pour Visual Studio 2005 : il n’est plus valide pour avoir une using déclaration à un type imbriqué ; vous devez qualifier explicitement chaque référence que vous faites au type imbriqué, placer le type dans un espace de noms ou créer un typedef.

Exemples

L’exemple suivant génère l’erreur 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;
}

Si vous utilisez le using mot clé avec un membre de classe, C++ vous oblige à définir ce membre à l’intérieur d’une autre classe (une classe dérivée).

L’exemple suivant génère l’erreur 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;
};