编译器错误 C3225

“arg”的泛型类型参数不能是“type”,它必须是值类型或句柄类型

泛型类型参数不是正确类型。

有关更多信息,请参见 Generics (Visual C++)

示例

不能使用本机类型实例化泛型类型。 下面的示例生成 C3225。

// C3225.cpp
// compile with: /clr
class A {};

ref class B {};

generic <class T>
ref class C {};

int main() {
   C<A>^ c = gcnew C<A>;   // C3225
   C<B^>^ c2 = gcnew C<B^>;   // OK
}

下面的示例使用 C# 创建一个组件。 请注意,该约束指定泛型类型只能使用值类型进行实例化。

// C3225_b.cs
// compile with: /target:library
// a C# program
public class MyList<T> where T: struct {}

此示例使用 C# 编写的组件,违反了 MyList 只能使用 Nullable 以外的值类型进行实例化的约束。 下面的示例生成 C3225。

// C3225_c.cpp
// compile with: /clr
#using "C3225_b.dll"
ref class A {};
value class B {};
int main() {
   MyList<A> x;   // C3225
   MyList<B> y;   // OK
}