编译器错误 C2951

类型声明只允许在全局、命名空间或类范围中使用

无法在全局或命名空间范围之外声明泛型或模板类。 如果在包含文件中进行泛型或模板声明,请确保包含文件在全局范围内。

以下示例生成 C2951:

// C2951.cpp
template <class T>
class A {};

int main() {
   template <class T>   // C2951
   class B {};
}

使用泛型时,也可能会出现 C2951:

// C2951b.cpp
// compile with: /clr /c

// OK
generic <class T>
ref class GC { };

int main() {
   generic <class T> ref class GC2 {};   // C2951
}