Was ist hier falsch ? (istringstream)



  • Hallo, also folgendes rufe ich in meinem main() auf :

    #include "kvm.h"
    
    #include <fstream>
    #include <sstream>
    #include <string>
    using namespace std;
    
    int main ()
    {
        ifstream InputStream("Eingabe.txt");
        string Input;
        getline(InputStream,Input);
        istringstream InputStringStream(Input);
    
        KVM Test(InputStringStream); // Hier meckert er
        return 0;
    }
    

    und hier die dazugehörige Klasse :

    #include "person.h"
    #include<sstream>
    
    class KVM
    {
    public:
    
        ~KVM(void);
    private:
        Person Kind;
        Person Vater;
        Person Mutter;
        KVM(void);
    public:
        KVM(istringstream istrstr_Zeile);
    };
    

    Und als Fehlermeldung bekomme ich :

    error C2664: 'KVM::KVM(std::istringstream)' : cannot convert parameter 1 from 'std::istringstream' to 'std::istringstream'



  • Hi,

    wuerde den Konstruktor so aussehen lassen:

    [cpp]
    KVM(istringstream **&**istrstr_Zeile);[/cpp]

    Wuerde mal darauf tippen, dass es daran liegt

    mfg
    v R



  • nun meckert der nicht mehr aber das richtige gibt der mir nicht aus in dem überladenen Konstruktor soll er folgendes tun :

    string name;
        short zahl;
    
        istrstr_Zeile >> name >> zahl;
        Kind.SetName(name);
        Kind.SetGebDat(zahl);
    
        istrstr_Zeile >> name >> zahl;
        Vater.SetName(name);
        Vater.SetGebDat(zahl);
    
        istrstr_Zeile >> name >> zahl;
        Mutter.SetName(name);
        Mutter.SetGebDat(zahl);
    
        Kind.ausgeben();    // Hier soll nur zu Testzwecken ausgegeben werden
        Mutter.ausgeben();  // welchen Inhalt er eingelesen hat
        Vater.ausgeben();   // aber da gibt der nur Muell aus
    

    Jemand eine Idee ?



  • Zeig uns doch mal dein setNane(), und das ausgeben()



  • So also hier die beiden SET-Methoden und die Ausgabe

    void Person::SetName(string str_Name)
    {
        Name = str_Name;
    }
    
    void Person::SetGebDat(short s_GebDat)
    {
        GebDat = s_GebDat;
    }
    
    void Person::ausgeben(void)
    {
        cout << Name << GebDat << endl;
    }
    

    in der Eingabedatei steht eine Zeile mit folgendem Inhalt :

    Otto1957 Willi1924 Erna1934

    und als Ausgabe erhalte ich :

    Otto1957-13108
    Otto1957-13108
    Otto1957-13108

    aber das ist nun nicht wirklich was er ausgeben soll.

    Verstehe übrigens auch nicht warum ich im überladenen Konstruktor den Paramter als Referenz übergeben soll....



  • na weil du den istringstream nicht wirklich kopieren willst. du willst die informationen daraus nur einmal auslesen, oder.

    Frage: Darf man istringstream kopieren, gibt es dafuer einen kopierkonstruktor?



  • Frage: Darf man istringstream kopieren, gibt es dafuer einen kopierkonstruktor?

    Nein. Copy-Ctor und Copy-Assignment-Op der Basisklasse basic_ios sind private. Die C++ Standardstreams können demzufolge weder kopiert noch einander zugewiesen werden.


Anmelden zum Antworten