2014-04-14 9 views
12

Ich habe meine C++/CLI-Code-Arrays wie folgt aus (zum Beispiel):Inkompatibilität mit verwalteten Array und std: Array zur gleichen Zeit

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

Es kompiliert gut, bis ich die Bibliothek „Array“, um das hinzufügen Projekt:

#include <array> 

Dann weiß ich nicht, wie das verwaltete CLI-Array verwenden, da der Compiler denkt, dass alle deklarierten Arrays die std::array sind.

Fehler Beispiele:

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

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

Wie dieses Problem zu lösen? Ich habe versucht, using namespace std aus dieser Datei zu entfernen, aber es macht keinen Unterschied. Sollte ich das aus jeder anderen C++ - Datei des Projekts entfernen?

+0

C++ - CLI ist ganz sicher nicht C++. – Deduplicator

+0

Entfernen Sie 'using namespace std;'? Weitere Informationen finden Sie hier: http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – Carsten

+3

Sie haben 'using namespace std;' Sie bekommen, was Sie verdienen:) – jrok

Antwort

36

Offensichtlich haben Sie irgendwo einen using namespace std; im Bereich. Achten Sie darauf, dass es in der .h-Datei verwendet wird, wenn Sie es nicht finden können.

Sie können die Mehrdeutigkeit beheben, die C++/CLI-Erweiterung Schlüsselwörter wie Array sind im cli Namespace. Dies kompiliert gut:

#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

Sicher, das war das Problem. Es nur aus der C++/CLI-Datei zu entfernen war nicht genug. Vielen Dank. Ihre zweite Option funktioniert auch gut, aber ich habe beschlossen, die 'using namespace std' überall in meinem Projekt zu entfernen. – SysDragon

Verwandte Themen