ошибка C3224: «System :: Nullable»: ни один перегруженный универсальный класс не принимает «1» аргументов универсального типа - PullRequest
4 голосов
/ 12 августа 2011

Я пытаюсь использовать Nullable<bool> в качестве трибула в C ++ / CLI (рассматривается как 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 ... но почему?!

1 Ответ

2 голосов
/ 25 августа 2011

Существует два различных System::Nullable s - неуниверсальных и универсальных . Ваше объявление об использовании приводит к тому, что первое из них вы хотите использовать.

К сожалению, ограничение C ++ / CLI состоит в том, что нельзя использовать объявление using для переноса универсального типа в область действия, когда существует другой неуниверсальный тип с тем же именем. Ваши единственные реальные варианты здесь - полностью указать имя типа или использовать директиву вместо объявления использования (т. Е. using namespace System;).

...