Incompatibility using managed array and std:array at same time

17,336

Clearly you have a using namespace std; in scope somewhere. Watch out for it being used in .h file if you cannot find it.

You can resolve the ambiguity, the C++/CLI extension keywords like array are in the cli namespace. This compiles fine:

#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;
}
Share:
17,336
SysDragon
Author by

SysDragon

.NET developer and musician. #SOreadytohelp profile for SysDragon on Stack Exchange, a network of free, community-driven Q&amp;A sites http://stackexchange.com/users/flair/2228942.png

Updated on June 07, 2022

Comments

  • SysDragon
    SysDragon almost 2 years

    I have my C++/CLI code using arrays like this (for example):

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

    It's compiling fine until I add the library "array" to the project:

    #include <array>
    

    Then I don't know how to use the managed CLI array, because the compiler thinks that all the declared arrays are the std::array.

    Errors examples:

    array<String^>^ arr
    //           ^ Error here: "too few arguments for class template "std::array""
    
    gcnew array<String^>(vec.size())
    //    ^ Error: "Expected a type specifier"
    

    How to solve this? I tried removing using namespace std from that file, but it makes no difference. Should I remove that from every other C++ file on the project?