自VS2010以来,C ++ / CLI std :: array已发生变化?

时间:2016-08-31 14:19:00

标签: c# arrays visual-studio-2010 visual-studio-2015 c++-cli

我有一个有效的VS2010解决方案,它有一个C#程序使用这种语法将数组传递给C ++ DLL:

在C ++文件中:

void MyClass::MyFunction( array< Byte >^% byteArray, unsigned int size )

第一个参数是指向数组的指针,第二个参数是其中的元素数。

在C#文件中,我将此函数称为:

MyClass myClass = new MyClass();
byte[] bArray = new byte[8];
myClass.MyFunction(ref bArray, 8)

这一切都有效。但我现在正试图将代码移植到VS2015解决方案中,并且C ++代码无法编译。

在C ++项目中,VS在函数定义中的尾随>下放置一个红色波形,消息似乎是too few arguments for class template "std::array"

我的猜测是std :: array模板定义在VS2010和VS2015之间发生了变化,或者编译器本身发生了变化(现在更严格了)

This question似乎支持我的猜测并指出std::array需要额外的尺寸参数。但是我试图传入一个任意大小的数组。

所以我的问题是:我可以在VS2015中实现相同的功能吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

在C ++中,std::array<T,n>绝对是一个固定大小的容器。但是,正如您可能已经注意到的那样,您实际上并没有说std::array。这指出了实际问题:您在VS2010中使用了另一个 array,这个定义现在被std::array隐藏了。这几乎肯定是由using namespace std;引起的,这是一种广泛的劝阻。

修复:移除using namespace std;并在您指的地方使用std::