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?


    Anmelden zum Antworten
     


  • 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