Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapis danych z wektora do pliku

Ostatnio zmodyfikowano 2017-02-01 21:00
Autor Wiadomość
koniol
Temat założony przez niniejszego użytkownika
Zapis danych z wektora do pliku
» 2017-02-01 19:16:25
Próbuje zapisać dane do pliku. Jak się poprawnie odwołać. Teraz mam adres w *iter

C/C++
bool FileManager::saveObjectFile( vector < Items *> dataFile ) {
    vector < Items *>::iterator iter; // iterator do przodu
   
    zp.open( filename, ios_base::out | ios_base::app ); //otworz plik
    if( zp.good() ) {
        cout << "ZAPIS";
        for( iter = dataFile.begin(); iter != dataFile.end(); ++iter ) {
           
            zp << * iter;
        }
        return true;
    }
    return false;
}

Jezeli użyje operatora dereferencjito dostaje taki błąd

error: no match for ‘operator<<’ (operand types are ‘std::ofstream {aka std::basic_ofstream<char>}’ and ‘Items’)
             zp << **iter;
P-157205
michal11
» 2017-02-01 19:53:28
Daj jeszcze jedną gwiazdkę, wtedy będziesz miał dereferencję wskaźnika na Items. Albo możesz też napisać tak

C/C++
for( Items * item: dataFile )
{
    zp << * item;
}

swoją drogą, jest jakiś powód dla którego przesyłasz vector przez wartość a nie referencję?
P-157208
michal11
» 2017-02-01 21:00:31
Odwołam się do twojego edita w oddzielnym poście. Założyłem, ze tak podstawowa sprawa jak przeładowany operator<< dla twojej klasy jest napisany i nie musze o tym wspominać, żeby zapisywać swoje typy do pliku musisz określić jak to zrobić, określasz to przeładowując operator<< w taki sposób

std::ostream operator <<( std::ostream & out, const T & obj );

gdzie T to twój typ, taka funkcja jeżeli ma mieć dostęp do danych prywatnych klasy musi być friendem, można to "obejść" zmieniając trochę design, przykład:

C/C++
Class MyClass
{
public:
   
    void Print( std::ostream & out ) const;
   
private:
   
    //data
};

std::ostream operator <<( std::ostream & out, const MyClass & obj )
{
    obj.Print( out );
    return out;
}

oczywiście implementacja zarówno funkcji Print jak i samego operatora<< zależy już od ciebie i od tego jak i co chcesz zapisywać.
P-157209
« 1 »
  Strona 1 z 1