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

本文关键字:std array 发生了 变化 CLI VS2010 以来 C++ | 更新日期: 2023-09-27 18:05:11

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

在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 之间发生了变化,要么编译器本身发生了变化(现在更加严格(

这个问题似乎支持了我的猜测,并指出std::array需要一个额外的大小参数。 但是,我正在尝试传入任意大小的数组。

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

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

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

解决方法:删除using namespace std;并在您想要的地方使用std::