Несовместимость с использованием управляемого массива и std: array в одно и то же время

У меня есть код С++/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; 
}

Он компилируется до тех пор, пока я не добавлю в библиотеку "массив":

#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 из этого файла, но это не имеет никакого значения. Должен ли я удалить это из любого другого файла С++ в проекте?

Ответ 1

Очевидно, что у вас есть using namespace std; в области где-то. Следите за тем, чтобы он использовался в файле .h, если вы не можете его найти.

Вы можете устранить двусмысленность, ключевые слова расширения С++/CLI, такие как array, находятся в пространстве имен 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;
}