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

przeniesienie obiektu do innej metody

Ostatnio zmodyfikowano 2016-09-05 14:33
Autor Wiadomość
hunter44
Temat założony przez niniejszego użytkownika
» 2016-09-04 20:34:00
Bardzo dziękuję.
P-151442
hunter44
Temat założony przez niniejszego użytkownika
» 2016-09-05 12:08:11
Poradzilem sobie z zapisem danych do pliku. Problem mam teraz w drugą stronę. Chcę z pliku wczytać dane.
Napisałem to po swojemu, ale nie działa.


C/C++
#include<iostream>
#include <string>
#include <process.h>
#include <list>
#include <cstddef>
#include <fstream>
#include<cstdlib>


using namespace std;


class Pilkarz
{
private:
   
    string imie;
    string nazwisko;
    string pozycja;
   
   
   
public:
    list < Pilkarz > lista;
   
   
   
    Pilkarz::Pilkarz( string = "Jan", string = "kowalski", string = "Napastnik" )
    {
        string a;
        string b;
        string d;
        imie = a;
        nazwisko = b;
        pozycja = d;
    }
   
   
    friend istream & operator >>( istream & is, Pilkarz & Pilkarz ) {
       
        cout << "\n\nImie: "; is >> Pilkarz.imie;
        cout << "Nazwisko: "; is >> Pilkarz.nazwisko;
        cout << "Pozycja:"; is >> Pilkarz.pozycja; cout << "\n\n";
        return is;
    }
   
   
    friend ostream & operator <<( ostream & os, const Pilkarz & Pilkarz ) {
        for( auto const & elem: Pilkarz.lista ) {
            os << elem.imie << ' ' << elem.nazwisko << ", " << elem.pozycja << '\n';
           
        }
        return os;
    }
   
    void dodaj_pilkarza()
    {
       
        Pilkarz pilkarz; // lokalna deklaracja obiektu
        Pilkarz p1;
        cin >> pilkarz;
        lista.push_back( pilkarz );
       
    }
   
   
};



int main()
{
    Pilkarz pilkarz;
    int flaga = 0;
   
    char switchOpcja { };
    do {
        cout << "1. Dodaj pilkarza" << endl;
        cout << "2. Pokaz liste" << endl;
        cout << "3. Zapisz do pliku" << endl;
        cout << "4. Wczytaj z pliku" << endl;
        cout << "5. Zakoncz" << endl;
        cin >> switchOpcja;
        switch( switchOpcja ) {
        case '1': //1.dodaj pilkarza
            {
                pilkarz.dodaj_pilkarza();
                flaga = 1;
               
                break;
            }
        case '2': //2.pokaz liste
            {
                if( flaga == 0 ) cout << "Lista jest pusta kolego. Najpierw kogos dodaj" << endl;
               
                cout << pilkarz << '\n';
                break;
            }
        case '3': //3.zapisz do pliku
            {
                if( flaga == 0 ) cout << "Chlopie ! Co TY chcesz zapisac skoro nie stworzyles listy ?" << endl;
               
                fstream plik;
                plik.open( "lista.txt", ios::out | ios::app );
                plik << pilkarz << '\n';
                plik.close();
               
               
               
                break;
            }
           
        case '4': //otworz z pliku
            {
                ifstream plik;
                plik.open( "lista.txt" );
                if( plik.good() == false ) { cout << "Plik nie istnieje\n" << endl; break; }
               
               
               
                while( true )
                {
                    flaga = 1;
                    if( plik.good() )
                    {
                        plik >> pilkarz;
                       
                        Pilkarz pilkarz;
                        Pilkarz p1;
                        list < Pilkarz > lista;
                        lista.push_back( pilkarz );
                        cout << pilkarz;
                       
                       
                       
                    }
                    else
                         break;
                   
                   
                } //while
                plik.close();
            }
           
            break;
        case '5': //zakoncz
            { cout << "Koniec.\n";
               
                break;
            }
            default:
            {
                cerr << "Jakis nieokreslony przypadek.\n";
            }
        }
    } while( switchOpcja != '5' );
   
   
   
    system( "PAUSE" );
   
   
    return 0;
}
P-151450
karambaHZP
» 2016-09-05 12:38:17
Sprawdzałeś co jest w pliku po zapisaniu. Nawet nie przeciążyłeś operatorów dla strumieni plikowych. Jak to ma zadziałać?
P-151451
hunter44
Temat założony przez niniejszego użytkownika
» 2016-09-05 13:40:45
Nie kompiluje się.

C/C++
friend ifstream & operator >>( ifstream & is, const Pilkarz & pilkarz )
{
    getline( is, pilkarz.imie );
    is >> pilkarz.nazwisko;
    is >> pilkarz.pozycja;
    return is;
}
P-151453
Monika90
» 2016-09-05 13:43:01
C/C++
class Pilkarz
{
    list < Pilkarz > lista;
Taki kod oznacza, że piłkarz składa się z piłkarzy. Jaki to ma sens? Zresztą, taki kod jet błędny, bo Pilkarz to typ niekompletny, dopiero w przyszłej wersji C++, czyli w C++17, będzie dopuszczalne użycie typów niekompletnych jako elementów kontenerów.

C/C++
Pilkarz::Pilkarz( string = "Jan", string = "kowalski", string = "Napastnik" )
{
    string a;
    string b;
    string d;
    imie = a;
    nazwisko = b;
    pozycja = d;
}
Ten kod też nie ma sensu.



Nie kompiluje się.
C/C++
friend ifstream & operator >>( ifstream & is, const Pilkarz & pilkarz )

Nie kompiluje się z powodu const.
P-151454
carlosmay
» 2016-09-05 14:33:16
@hunter44 Nie wiem czemu komplikujesz sobie życie. Dostałeś gotowy program, napisany wg ogólnie przyjętych zasad
oraz wskazówkami co możesz jeszcze zmienić, aby było ci wygodnie. Już bardziej nie da się pomóc (chyba, że gotowca, którego prawie masz).

Ostatni kod, to praktycznie powtórzenie pierwszych twoich zmagań (jakbyś nie wyciągał wniosków).
Proponuję spokojnie przysiąść się do lektury:
- Programowanie obiektowo orientowane ogólnie.
- Szczególnie - budowa klasy, czym jest obiekt, czym jest typ zdefiniowany przez użytkownika.
- Użycie metod.
- Przeciążanie operatorów.
- i oczywiście podstawy tj. po co są pętle, instrukcje wielokrotnego wyboru, zasięg zmiennych itd.

Temat wydaje się być wyczerpany.
P-151455
1 2 « 3 »
Poprzednia strona Strona 3 z 3