Incompatibility using managed array and std:array at same time
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;
}
SysDragon
.NET developer and musician. #SOreadytohelp profile for SysDragon on Stack Exchange, a network of free, community-driven Q&A sites http://stackexchange.com/users/flair/2228942.png
Updated on June 07, 2022Comments
-
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?