错误C3392' VAL_T':通用参数的无效类型参数' T'通用' System :: Nullable',必须有一个公共无参数构造函数

时间:2018-04-10 20:40:44

标签: generics visual-c++ visual-studio-2015

.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:&#39; VAL_T&#39;:泛型的无效类型参数   参数&#39; T&#39;通用&#39; System :: Nullable&#39;,必须有公共   无参数构造函数

我在Visual Studio 2010(vc10)和2012(vc110)中没有出现任何错误。

我不知道在哪里添加构造函数。有人可以请帮助。 提前谢谢。

更新

我发现当前的.Net框架中已经更改了Nullable对象接口。 当前版本:

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()。我仍然得到同样的错误。

参考链接Nullable in current .Net framework

Nullable in .Net framework 4

1 个答案:

答案 0 :(得分:0)

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

我将通用类型设为value struct, gcnew()

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