我试图使用Nullable<bool>
作为c++/CLI中的tribool(视为bool?在c#)。我从下面的函数声明中得到这个奇怪的错误消息:
static IList<Modification^>^ modifications(double mass,
double tolerance,
Nullable<bool> monoisotopic,
Nullable<bool> approved,
Site site,
Position position,
Classification classification,
Nullable<bool> hidden);
我有适当的using语句将类型带入作用域。每次使用Nullable:
都会出现错误。error C3224: 'System::Nullable' : no overloaded generic class takes '1' generic type arguments
我也尝试了Nullable<System::Boolean>
,但得到同样的错误。如果我使用完全限定的名称System::Nullable,错误就会消失。但是为什么呢? !
有两种不同的System::Nullable
——非通用的和通用的。当你真正想使用的是后者时,你的using声明将前者引入了作用域。
不幸的是,c++/CLI的一个限制是,当存在另一个具有相同名称的非泛型类型时,不能使用using声明将泛型类型引入作用域。您在这里唯一的实际选择是完全限定类型名称或使用using 指令而不是using声明(即using namespace System;
)。