Compiler Error C2691

'data type' : a managed array cannot have this element type

The type of a managed array element can be a value type or a reference type.

The following sample generates C2691:

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

int main() {
   array<A>^ a1 = gcnew array<A>(20);   // C2691
   array<int>^ a2 = gcnew array<int>(20);   // value type OK
}

The following sample generates C2691:

// C2691b.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
int main() {
   int * a1 __gc[];   // C2691
   int * a1 = new int [20];   // OK
}

C2691 can also occur if you attempt to define a jagged array using Managed Extensions for C++. Jagged arrays are supported in the current syntax, see array (Visual C++) for more information.

The following sample generates C2691:

// C2691c.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;
int main() {
   Int32 myJaggedArray[][] = new Int32 [50][];   // C2691
}