我正在尝试使用Nullable<bool>
作为C ++ / CLI中的tribool(在C#中被视为bool?)。我从以下函数声明中得到了这个奇怪的错误消息:
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,那么错误就会消失......但为什么?!
答案 0 :(得分:2)
有两种不同的System::Nullable
s - a non-generic one和a generic one。当你真正想要使用后者时,你的使用声明会将前者纳入范围。
不幸的是,当存在另一个具有相同名称的非泛型类型时,不能使用using声明将泛型类型带入作用域,这是C ++ / CLI的一个限制。这里唯一真正的选择是完全限定类型名称或使用使用指令而不是使用声明(即using namespace System;
)。