In Datei schreiben



  • Hallo,

    ich habe in Visual C++ folgenden Code in die Funktion eines Buttons geschrieben:

    fstream datei;
    datei.open ("D:/index.txt", ios::out);
    datei <<CodeBox->Text;
    datei.close ();
    

    Dazu erhalte ich eine ganze Menge an Fehlermeldugen:

    1>------ Erstellen gestartet: Projekt: WebSource, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>WebSource.cpp
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(187) : error C2065: 'fstream': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(187) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'datei'
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(187) : error C2065: 'datei': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2065: 'datei': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2228: Links von ".open" muss sich eine Klasse/Struktur/Union befinden.
    1>        Typ ist ''unknown-type''
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2653: 'ios': Keine Klasse oder Namespace
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2065: 'out': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2653: 'ios': Keine Klasse oder Namespace
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2065: 'binary': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2653: 'ios': Keine Klasse oder Namespace
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(188) : error C2065: 'in': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(189) : error C2065: 'datei': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(190) : error C2065: 'datei': nichtdeklarierter Bezeichner
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(190) : error C2228: Links von ".close" muss sich eine Klasse/Struktur/Union befinden.
    1>        Typ ist ''unknown-type''
    1>Das Buildprotokoll wurde unter "file://c:\Users\Carl Hamann\Documents\Visual Studio 2008\Projects\WebSource\WebSource\Debug\BuildLog.htm" gespeichert.
    1>WebSource - 14 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Anscheinend erkennt er fstream und alles dazugehörige nicht. Dabei habe ich fstream inkludiert.



  • 1.ja
    2. wird "die Funktion eines Buttons" überhaupt aufgerufen?



  • Sorry habe Anfangspost editiert. War mein Fehler...



  • Kann es sein, dass du

    using namespace std;
    

    vergessen hast?





  • wxSkip schrieb:

    Kann es sein, dass du

    using namespace std;
    

    vergessen hast?

    Mist, ja!
    Jetzt bekommen ich diese Fehlermeldungen:

    1>------ Erstellen gestartet: Projekt: WebSource, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>WebSource.cpp
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(190) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'System::String ^' akzeptiert (oder keine geeignete Konvertierung möglich)
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(653): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(700): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(738): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(785): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(909): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(916): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(923): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(930): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(148): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__clrcall *)(std::basic_ostream<_Elem,_Traits> &))"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(154): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__clrcall *)(std::basic_ios<_Elem,_Traits> &))"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(161): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__clrcall *)(std::ios_base &))"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(170): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(176): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(183): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(190): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(210): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(243): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(263): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 int)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(288): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(308): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(328): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(349): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(369): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(390): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(410): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(430): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(450): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(470): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)"
    1>        with
    1>        [
    1>            _Elem=char,
    1>            _Traits=std::char_traits<char>
    1>        ]
    1>        bei Anpassung der Argumentliste '(std::fstream, System::String ^)'
    1>Das Buildprotokoll wurde unter "file://c:\Users\Carl Hamann\Documents\Visual Studio 2008\Projects\WebSource\WebSource\Debug\BuildLog.htm" gespeichert.
    1>WebSource - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Sorry für die Menge.



  • Sieht so aus, als würdest du in .NET programmieren. Dann sollte das besser ins .NET-Subforum (der Fehler ist, dass operator<< von fstream keinen System::String^ akzeptiert, welcher aber wie schon gesagt Teil des .NET-Frameworks ist und nicht Teil der C++-Standardbibliothek)



  • Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'System::String ^' akzeptiert
    

    System::String ^ ist aber kein C++!
    C++/CLI?
    -> anderes Unterforum.



  • Du kannst dem fstream operator << keinen .net String übergeben.

    http://www.cplusplus.com/reference/iostream/ostream/operator<</

    Du musst den String in einen C - String konvertieren um ihn dem fstream operator übergeben zu können, wie das geht - keine Ahnung.



  • datei.open ("D:/index.txt", ios::out);
    

    Also ich würds so machen:

    string pfader = "D:\\index.txt";
    datei.open(pfader.c_str(),fstream::in | fstream::out | fstream::app);
    


  • rip_oo schrieb:

    datei.open ("D:/index.txt", ios::out);
    

    Also ich würds so machen:

    string pfader = "D:\\index.txt";
    datei.open(pfader.c_str(),fstream::in | fstream::out | fstream::app);
    

    Und welchen Vorteil hätte das genau?

    Ich sehe nur vier Nachteile.

    • Du erstellst unnötigerweise ein std::string -Objekt, nur um nachher den internen C-String zu holen.
    • Du machst dich mit \\ statt / plattformabhängig.
    • Du hast mehr Code.
    • Du übergibst Flags, welche die Semantik verändern.


  • Okay, ich war mir von Anfang an nicht sicher wo ich dises Thema reinschreiben soll.
    Ich habe das hier gefunden und
    habe die erste Methode mal ausprobiert. Dabei bekomme ich diese zwei Fehlerzeilen:

    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(192) : error C4980: "__pin": Für die Verwendung dieses Schlüsselworts ist die Befehlszeilenoption /clr:oldSyntax erforderlich.
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(191) : error C3699: "*": Diese Referenzierung kann nicht für den Typ "System::String" verwendet werden.
    

    Ich weiß nicht wie ich jetzt die Befehlszeilenoptionen /clr:oldSyntax einbauen soll.
    Außerdem wundert es mich ein bisschen, dass man keinen Zeiger für System::String verwenden kann.



  • Schön dass du den Link gefunden hast, aber wirklich gelesen hast du ihn nicht.

    1. Gibt es noch eine Methode 2
    2. Steht drunter ein Hinweis den du dringend lesen solltest
    3. Gehört das wie gesagt nach C++/CLI. Wenn dir die Info aus 1) und 2) nicht weiterhilft solltest du den Thread da drüben neu eröffnen. Hier geht es wie gesagt um Standard-C++, nicht um Kuddelmuddel C++/.NET 😉


  • Okay danke für den Hinweis. Wenn ich es dann auf /clr:oldSyntax umstelle bekomme
    ich einen schönen Haufen Fehlermeldungen. Seht selbst:

    1>cl : Befehlszeile warning D9035 : Die Option "clr:oldsyntax" ist veraltet und wird in einer der nächsten Versionen entfernt.
    1>WebSource.cpp
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(26) : error C2059: Syntaxfehler: 'public'
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(26) : error C2059: Syntaxfehler: 'public'
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(27) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>c:\users\carl hamann\documents\visual studio 2008\projects\websource\websource\Form1.h(27) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    1>.\WebSource.cpp(9) : error C2065: 'array': nichtdeklarierter Bezeichner
    1>.\WebSource.cpp(9) : error C2275: 'System::String': Ungültige Verwendung dieses Typs als Ausdruck
    1>.\WebSource.cpp(9) : error C2059: Syntaxfehler: '>'
    1>.\WebSource.cpp(10) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>.\WebSource.cpp(10) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    

    Es steht ja auch im Prtokoll, dass oldSyntax veraltet ist, das merkt man auch,
    denn selbst von VC++ selbst erstellter Code scheint auf einmal falsch zu sein.

    P.S. Wäre nett wenn mich ein Moderator rüber ins .NET-Forum schieben könnte.


Anmelden zum Antworten