自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中实现相同的功能吗?如果是这样,如何?
在C++中,std::array<T,n>
绝对是一个固定大小的容器。但是,正如您可能已经注意到的那样,您实际上并没有说std::array
。这指向了实际问题:您在VS2010中使用了另一个array
,该定义现在被std::array
隐藏。这几乎可以肯定是由using namespace std;
引起的,这是人们普遍不鼓励的。
解决方法:删除using namespace std;
并在您想要的地方使用std::
。