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

Anmelden zum Antworten