Поделиться через


Ошибка компилятора C3225

аргумент универсального типа для "аргумента" не может быть "типом", он должен иметь тип значения или тип дескриптора

Аргумент универсального типа имеет неверный тип.

Дополнительные сведения см. в разделе Универсальные типы и методы (расширения компонентов C++).

Пример

Нельзя создавать экземпляры универсального типа в собственном типе.В следующем примере возникает ошибка C3225.

// C3225.cpp
// compile with: /clr
class A {};

ref class B {};

generic <class T>
ref class C {};

int main() {
   C<A>^ c = gcnew C<A>;   // C3225
   C<B^>^ c2 = gcnew C<B^>;   // OK
}

В следующем примере создается компонент с помощью C#.Обратите внимание, что ограничение указывает, что экземпляры универсального типа могут создаваться только с типом значения.

// C3225_b.cs
// compile with: /target:library
// a C# program
public class MyList<T> where T: struct {}

В данном примере потребляется компонент, написанный на языке C#, и нарушается ограничение, что экземпляры MyList могут создаваться только с типом значения, отличным от Nullable.В следующем примере возникает ошибка C3225.

// C3225_c.cpp
// compile with: /clr
#using "C3225_b.dll"
ref class A {};
value class B {};
int main() {
   MyList<A> x;   // C3225
   MyList<B> y;   // OK
}