編譯器錯誤 C2885
'class::identifier' : 不是非類別範圍的有效 using-declaration
這個錯誤可能是因為 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;
};