VC++ 2005 unterstützt keine Stringkonvertierung in System::String???
-
Hi, ich möchte einen Pfad initialisieren und dann davon kopieren. Die Initialisierung sieht bei mir so aus:
#include <string> using namespace std; string FILENAME = "C:\\Temp\\text.txt"; void AllSaveAs(string FILENME) { System::IO::FileStream^ fs = gcnew FileStream(FILENME, FileMode::OpenOrCreate, FileAccess::Write); System::IO::StreamWriter^ streamWRTR = gcnew StreamWriter(fs); streamWRTR->WriteLine("HALLO"); streamWRTR->Flush(); }
Doch nun sagt der Compiler:
Zeile 17 : error C2664: 'System::IO::FileStream::FileStream(System::String ^,System::IO::FileMode,System::IO::FileAccess)': Konvertierung des Parameters 1 von 'std::string' in 'System::String ^' nicht möglich
Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden.Wie kann ich das umgehen?
-
Du bringst hier STL und .NET durcheinander!
Zur Konvertierung siehe FAQ.
In Deinem speziellen Fall:
String ^s = gcnew String(FILENAME.c_str());
-
Ja gut, jetzt hat er aber noch den Fehler, dass Globale Variabeln kein '^' haben dürfen.
String^ FILESTR = gcnew String("C:\\Temp\\text.txt"); void AllSaveAs(String^ FILENME) { System::IO::FileStream^ fs = gcnew FileStream(FILESTR, FileMode::OpenOrCreate, FileAccess::Write); System::IO::StreamWriter^ streamWRTR = gcnew StreamWriter(fs); streamWRTR->WriteLine("HALLO"); streamWRTR->Flush(); }
Der Compiler sagt:
Zeile 1 : error C3145: "FILESTR": Eine globale oder statische Variable darf nicht den verwalteten Typ "System::String ^" aufweisen.
Eine globale oder statische Variable oder ein Member eines systemeigenen Typs, der auf Objekte im gc-Heap verweist, kann nicht deklariert werden.
-
Es gibt keine globalen Variablen in .NET... du kannst höchstens statische Felder in einer public Klasse machen...
public ref class Globals { static Globals() { FileName = "Test"; } public: static String^ FileName; };