getline macht probleme



  • Hallo,

    ich möchte ganz gern aus einer Datei Zahlen einlesen.
    Es geht aber leider nicht, da er bei getline in zeile 18 einen Fehler gibt.
    error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': Erwartet 3 Argumente - 2 unterstützt

    Ja er sagt zwar, das er 3 Argumente erwartet, aber ich habe schon ganz oft gesehen, dass die meisten zwei argumente übergeben.
    Und bei anderen funktionierts.
    Kann mir vielleicht jemand weiterhelfen.

    Danke

    int main()
    {
    
    	//Variablen
    	C_Flaeche Flaeche_1;
    
    	ifstream Input("Studienarbeit2.txt",ios::beg);
    
    	if(Input == NULL)
    	{
    		cout << "Datei konnte nicht geoeffnet werden" << endl;
    		//cin.get();
    		//return 1;
    	}
    	vector<double> m_xyzWerte(3);
    	vector<double>::iterator i;
    	for( double i ; getline( Input, i ) ; )
    		m_xyzWerte.push_back(i);
    		Input.read((char *) &Flaeche_1, sizeof(Flaeche_1));
    		cout << static_cast<int> (m_xyzWerte.size()) << " Daten eingelesen " << endl;
    
    	for(i=m_xyzWerte.begin();i<m_xyzWerte.end();i++)
    		cout<< (*i) << endl;
    
    	Input.close();
    	cin.get();
    	return 0;
    }
    


  • Hier steht, dass std::getline() als erstes Argument einen std::ifstream und als zweites einen std::string nimmt, was bei dir nicht der Fall ist.

    Trotzdem eine merkwürdige (vor allem falsche) Fehlermeldung...



  • Erstmal danke ich dir...
    Jetzt gehts. Ich hab die double zu String geändert.(Zeile 16-19)

    vector<string> m_xyzWerte(3);
    	vector<string>::iterator i;
    	for( string a ; getline( Input, a ) ; )
    		m_xyzWerte.push_back(a);
    

    Jetzt ist es doch aber so, dass die Werte in dem Vector Strings sind.
    Ich muss aber die Werte als doubles haben, damit ich mit ihnen weiterrechnen kann.
    Kann ich da einfach casten????
    Ich glaube nicht, dass das geht, oder???

    Oder kennt ihr vielleicht irgendeine Möglichkeit die Daten gleich als doubles in den Vector zu speichern.
    Das wäre mir am libsten.
    Oder irgendeine nette andere (nicht zu komplizierte Methode)

    Danke für eure Hilfe
    🙂



  • Mit der Klasse std::stringstream kann man elementare Typen zu Strings umwandeln und umgekehrt.

    vector<double>::iterator i;
        for( double i ; getline( Input, i ) ; )
            m_xyzWerte.push_back(i);
            Input.read((char *) &Flaeche_1, sizeof(Flaeche_1));
            cout << static_cast<int> (m_xyzWerte.size()) << " Daten eingelesen " << endl;
    

    Das macht wahrscheinlich nicht das, was du erwartest. Erstens mal wird der Iterator i lokal überschrieben (Redeklaration mit double ), zweitens hat die For-Schleife nur eine Anweisung. Oder sind die anderen beiden nur schlecht eingerückt? Schönes Beispiel für die Wahl der falschen Schleife (wobei ich mich grundsätzlich frage, was du genau anstellen willst). While wäre ziemlich sicher übersichtlicher.

    vector<string> m_xyzWerte(3);
        vector<string>::iterator i;
        for( string a ; getline( Input, a ) ; )
            m_xyzWerte.push_back(a);
    

    Hier übrigens wieder ein unbenutzter Iterator.


Anmelden zum Antworten