我的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;
}
在我添加库&#34; array&#34;之前,它正在编译好。到项目:
#include <array>
然后我不知道如何使用托管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"
如何解决这个问题?我尝试从该文件中删除using namespace std
,但没有任何区别。我应该从项目中的每个其他C ++文件中删除它吗?
答案 0 :(得分:46)
显然,你的某个地方有一个using namespace std;
。如果找不到它,请注意它在.h文件中使用。
您可以解决歧义, array 等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;
}