自 VS2010 以来,C++/CLI std::array 发生了变化?
C++/CLI std::array has changed since VS2010?
我有一个有效的 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中实现同样的功能吗?如果是,怎么做?
在C++中,std::array<T,n>
绝对是一个固定大小的容器。但是,您可能已经注意到,您实际上并没有说 std::array
。这指向实际问题:您在 VS2010 中使用了 another array
,现在被 std::array
隐藏的定义。这几乎可以肯定是由 using namespace std;
引起的,这是人们普遍反对的做法。
修复:删除 using namespace std;
并按您的意思使用 std::
。
我有一个有效的 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中实现同样的功能吗?如果是,怎么做?
在C++中,std::array<T,n>
绝对是一个固定大小的容器。但是,您可能已经注意到,您实际上并没有说 std::array
。这指向实际问题:您在 VS2010 中使用了 another array
,现在被 std::array
隐藏的定义。这几乎可以肯定是由 using namespace std;
引起的,这是人们普遍反对的做法。
修复:删除 using namespace std;
并按您的意思使用 std::
。