同时使用托管数组和std:数组不兼容

时间:2014-04-14 14:01:25

标签: .net arrays visual-studio-2012 visual-c++ c++-cli

我的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 ++文件中删除它吗?

1 个答案:

答案 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;
}