2014-04-14 5 views
12

Mam kod C++/CLI przy użyciu tablic tak (na przykład):Niezgodność użyciu zarządzanego tablicy i std: Array w tym samym czasie

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

Jest kompilacją dobrze, dopóki ja dodać biblioteka „tablicę” do projekt:

#include <array> 

Potem nie wiem, jak korzystać z zarządzanego tablicę CLI, ponieważ kompilator uważa, że ​​wszystkie zgłoszone tablice są na std::array.

Błędy przykładów:

array<String^>^ arr 
//   ^Error here: "too few arguments for class template "std::array"" 

gcnew array<String^>(vec.size()) 
// ^Error: "Expected a type specifier" 

Jak rozwiązać ten problem? Próbowałem usunąć using namespace std z tego pliku, ale nie robi to żadnej różnicy. Czy powinienem usunąć to z każdego innego pliku C++ w projekcie?

+0

C++ - cli na pewno nie jest C++. – Deduplicator

+0

Usunąć 'using namespace std;'? Zobacz tutaj, aby uzyskać więcej informacji: http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – Carsten

+3

Masz 'using namespace std;' Otrzymujesz to, na co zasługujesz:) – jrok

Odpowiedz

36

Najwyraźniej masz gdzieś zakres using namespace std;. Uważaj na to, że jest on używany w pliku .h, jeśli nie możesz go znaleźć.

Możesz rozwiązać niejednoznaczność, słowa kluczowe z rozszerzeniem C++/CLI, takie jak , macierz są w przestrzeni nazw . Kompiluje to dobrze:

#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; 
} 
+3

Z pewnością to był problem. Usunięcie go tylko z pliku C++/CLI nie było wystarczające. Dzięki. Twoja druga opcja również działa dobrze, ale postanowiłam usunąć "use namespace std" wszędzie w moim projekcie. – SysDragon

Powiązane problemy