2011-08-12 26 views
4

我試圖使用Nullable<bool>作爲C++/CLI中的tribool(在C#中看作bool?)。我從下面的函數聲明得到這個奇怪的錯誤消息:錯誤C3224:'System :: Nullable':沒有重載泛型類需要'1'泛型類型參數

static IList<Modification^>^ modifications(double mass, 
              double tolerance, 
              Nullable<bool> monoisotopic, 
              Nullable<bool> approved, 
              Site site, 
              Position position, 
              Classification classification, 
              Nullable<bool> hidden); 

我有使用說明正確帶來的類型分爲範圍。每次使用可空的出現的錯誤:

error C3224: 'System::Nullable' : no overloaded generic class takes '1' generic type arguments 

我也試過Nullable<System::Boolean>,但得到了同樣的錯誤。如果我使用全限定名System :: Nullable ...,錯誤消失了,但爲什麼?

+1

你有使用_declaration_或使用_directive_將'System :: Nullable <>'納入範圍嗎?我無法使用VC++ 2010 SP1(使用指令)進行再現;你使用的是什麼版本的VC++? – ildjarn

+0

@ildjarn:VC++ 2008 SP1。我使用這個指令: '使用System :: Nullable;' –

回答

2

有兩種不同的System::Nullable s - a non-generic onea generic one。您使用的聲明會將前者納入範圍,而後者則是您實際想要使用的。

不幸的是,當C++/CLI存在另一個具有相同名稱的非泛型類型時,不能使用using聲明將泛型類型引入到範圍中。此處唯一的實際選項是完全限定類型名稱或使用指令而不是使用聲明(即using namespace System;)。