Frage zu std::string



  • Hallo,
    ich versuche mir durch Selbststudium C++ beizubringen, naja bin noch ziemlich am Anfang, ich hoffe ihr könnt mir helfen.
    hier mein Problem:

    ich schreibe eine kleine Consolenanwendung, der Benutzer gibt einen Dateinamen an:
    z.B. C:\temp\Datei.txt

    diesen Wert möchte ich in eine Variable vom Typ std::string speichern
    hier ein Code-Auschnitt:
    ---------------------------------------------------
    std::string s="";
    cout << "Geben Sie bitte den Dateinamen ein: "

    cin >> s;
    oder
    cin >> s.c_str();
    ---------------------------------------------------
    beides funktioniert nicht.
    was habe ich den falsch gemacht?
    😞



  • zweites kann nicht funktionieren, da er ein kontantes objekt zurückliefert.
    erstes muss funktionieren. das heisst dein fehler muss wo anderes liegen.



  • Das ist die Fehlermeldung:

    Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std
    ::allocator<char> >' akzeptiert (oder keine geeignete Konvertierung moeglich)

    vielleicht kannst du damit etwas anfangen.



  • Sülo schrieb:

    Das ist die Fehlermeldung:

    Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std
    ::allocator<char> >' akzeptiert (oder keine geeignete Konvertierung moeglich)

    vielleicht kannst du damit etwas anfangen.

    #include <string>
    #include <iostream>
    


  • naja das habe ich schon leider drin, hier der Code:

    #include <iostream.h>
    #include <fstream.h>
    #include <string>

    int main()
    {
    fstream Datei;
    std::string DateiName="", string="";

    cout << "Bitte geben Sie die gewuenschte Datei an.\n";
    cout << "Fals sie noch nicht existiert, wird sie erstellt.\n";
    cout << "Datei (mit Pfadangabe) . . .: ";

    cin >> DateiName;

    Datei.open(DateiName.c_str(), ios::out | ios::trunc);
    if (Datei.is_open() != 1)
    {
    cout << "\n" << "Datei konnte nicht geoeffnet werden!\n";
    return 1;
    }

    cout << "\n"<<"Geben Sie bitte den Text ein, der in die Datei geschrieben werden soll\n\n";

    for(int i=0; i<10 || string == "end"; ++i)
    {
    cout << "Zeile " << i << " . . :";
    cin.getline(string.c_str(), sizeof(string));

    Datei.write(string.c_str(), sizeof(string));
    Datei.write("\n", 1);
    }

    if (Datei.is_open() == 1)
    {
    Datei.clear();
    Datei.close();
    }

    return 0;
    }



  • #include <iostream> 
    #include <fstream> 
    #include <string>
    
    using namespace std;
    
    int main() 
    { 
    	fstream Datei; 
    	string DateiName="", str=""; 
    
    	cout << "Bitte geben Sie die gewuenschte Datei an.\n"; 
    	cout << "Fals sie noch nicht existiert, wird sie erstellt.\n"; 
    	cout << "Datei (mit Pfadangabe) . . .: "; 
    
    	cin >> DateiName; 
    
    	Datei.open(DateiName.c_str(), ios::out | ios::trunc); 
    	if (Datei.is_open() != 1) 
    	{ 
    		cout << "\n" << "Datei konnte nicht geoeffnet werden!\n"; 
    		return 1; 
    	} 
    
    	cout << "\n"<<"Geben Sie bitte den Text ein, der in die Datei geschrieben werden soll\n\n"; 
    
    	for(int i=0; i<10 || str == "end"; ++i) 
    	{ 
    		cout << "Zeile " << i << " . . :"; 
    		getline( cin, str);
    
    		Datei.write(str.c_str(), str); 
    		Datei.write("\n", 1); 
    	} 
    
    	if (Datei.is_open() == 1) 
    	{ 
    		Datei.clear(); 
    		Datei.close(); 
    	} 
    
    	return 0; 
    }
    


  • Danke für die schnelle Hilfe.
    Aber was hatte ich den falsch gemacht?



  • du hast using namespace std vergessen.

    sonst musst du std::cout eintippen nicht nur cout



  • er hatte auch die falschen Header (mit .h!) benutzt. Eigentlich hat ssm schon die Lösung gehabt.



  • sorry, aber wo ist denn der Unterschied zwischen <iostream> und <iostream.h>?



  • mit .h ist Ansi C Standard

    ohne ist c++ Standard 😃





  • Pilger81 schrieb:

    mit .h ist Ansi C Standard

    ohne ist c++ Standard 😃

    Eigentlich nicht, iostream(.h) gibt's in C nicht, die haben stdio.h
    Ohne .h gibt's erst seit Einführung des namespace Features.


Anmelden zum Antworten