Sys*_*gon 16 .net arrays c++-cli visual-c++ visual-studio-2012
我有使用这样的数组的C++/CLI代码(例如):
array<String^>^ GetColNames() {
vector<string> vec = impl->getColNames();
array<String^>^ arr = gcnew array<String^>(vec.size());
for (int i = 0; i < vec.size(); i++) {
arr[i] = strConvert(vec[i]);
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
它正在编译,直到我将库"array"添加到项目中:
#include <array>
Run Code Online (Sandbox Code Playgroud)
然后我不知道如何使用托管CLI数组,因为编译器认为所有声明的数组都是std::array.
错误示例:
array<String^>^ arr
// ^ Error here: "too few arguments for class template "std::array""
gcnew array<String^>(vec.size())
// ^ Error: "Expected a type specifier"
Run Code Online (Sandbox Code Playgroud)
怎么解决这个?我尝试using namespace std从该文件中删除,但它没有任何区别.我应该从项目中的每个其他C++文件中删除它吗?
Han*_*ant 48
显然你using namespace std;在某个地方有一个范围.如果你找不到它,请注意它在.h文件中的使用.
您可以解决歧义,C++/CLI扩展关键字(如数组)位于cli命名空间中.编译好:
#include "stdafx.h"
#include <array>
using namespace std; // <=== Uh-oh
using namespace System;
int main(cli::array<System::String ^> ^args)
{
auto arr = gcnew cli::array<String^>(42);
return 0;
}
Run Code Online (Sandbox Code Playgroud)