Erreur du compilateur C2885
Mise à jour : novembre 2007
Message d'erreur
'classe::identificateur' : déclaration using non valide au niveau d'une portée qui n'est pas de classe
'class::identifier' : not a valid using-declaration at non-class scope
Vous avez mal utilisé une déclaration using.
Exemple
Cette erreur peut être due à la mise en conformité du compilateur pour Visual C++ 2005 : une déclaration using pour un type imbriqué n'est désormais plus valide ; vous devez qualifier explicitement chaque référence au type imbriqué, placer le type dans un espace de noms ou créer un typedef. Pour plus d'informations, consultez Modifications avec rupture dans le compilateur Visual C++ 2005.
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 mot clé using avec un membre de classe, C++ vous impose de 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;
};