错误 C3392 "VAL_T":泛型"System::Nullable"的泛型参数"T"的类型参数无效,必须具有公共无参数构造函数



.h 文件

generic<typename VAL_T> where VAL_T : value class,System::ValueType
    Nullable<VAL_T> Get();

.cpp文件

generic<typename VAL_T> 
Nullable<VAL_T> FidField::Get()
  {
        return Nullable<VAL_T>();
  }

当我编译此代码时,出现以下错误。

错误 C3392:"VAL_T":泛型的类型参数无效 泛型"系统::可为空"的参数"T",必须具有公共 无参数构造函数

我在Visual Studio 2010(vc10(

和2012(vc110(中没有收到任何错误。

我不确定在哪里添加构造函数。有人可以帮忙吗?提前谢谢。

更新

我看到在当前的 .Net 框架中更改了可为空的对象接口。当前版本:

generic<typename T>
where T : value struct, gcnew()
[SerializableAttribute]
public value struct Nullable

在 VS2010 中:

generic<typename T>
where T : value class
public value class Nullable

所以我添加了 Nullable 类所期望的 gcnew((。我仍然收到同样的错误。

参考链接:在当前的 .Net 框架中可为空

在 .Net 框架 4 中可为空

该问题是由于 .NET Framework 4.5 中 Nullable 的泛型类型名更改造成的。

我使泛型类型具有value struct, gcnew()

我在头文件和 CPP 文件中都添加了where VAL_T : value class,System::ValueType, gcnew()。这解决了问题。

最新更新