我有一个有效的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中实现相同的功能吗?如果是这样,怎么样?
答案 0 :(得分:3)
在C ++中,std::array<T,n>
绝对是一个固定大小的容器。但是,正如您可能已经注意到的那样,您实际上并没有说std::array
。这指出了实际问题:您在VS2010中使用了另一个 array
,这个定义现在被std::array
隐藏了。这几乎肯定是由using namespace std;
引起的,这是一种广泛的劝阻。
修复:移除using namespace std;
并在您指的地方使用std::
。