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

[C++] Błędy kompilacji - std::vector, a fstream jako pole w klasie

Ostatnio zmodyfikowano 2013-03-23 20:03
Autor Wiadomość
Unlimited
Temat założony przez niniejszego użytkownika
[C++] Błędy kompilacji - std::vector, a fstream jako pole w klasie
» 2013-03-23 18:56:37
Już wyrywam sobie włosy z nerwów. Co może być tutaj źle? Kompilator wywala jakieś błędy w całkiem innych plikach niż ten co kompiluje :/
Ogólnie wskazuje na linijkę
C/C++
czlowiek.push_back( uczniowie( Ximie, Xnazwisko, Xmiejscowosc, Xkod, Xulica, Xwiek, Xnumer ) );

Program:
C/C++
// Platforma: Windows (x32 & x64)
// Kompilator: GNU GCC
// Srodowisko: Code::Blocks 10.05
// Autor:
// E-mail:

#include <iostream> //standardowa biblioteka do obslugi m.in. cout, cin
#include <string> //biblioteka do obslugi lancuchow znakow
#include <fstream> //biblioteka do obsulgi plikow
#include <cstdlib> //biblioteka do obslugi komend m.in. ( zatrzymanie programu, usuwanie pliku )
#include <vector> //biblioteka do obslugi "nieskonczonej" tablicy
using namespace std;

class uczniowie //glowna klasa uczniowie
{
private: //prywatne zmienne
    string imie, nazwisko, miejscowosc, kod, ulica, Ximie, Xnazwisko, Xmiejscowosc, Xkod, Xulica, odnosnik, napis, bufor, fraza;
    int wiek, numer, Xwiek, Xnumer, x, lp, lp_cache;
    size_t ZnalezionaFraza;
    uczniowie( string Ximie, string Xnazwisko, string Xmiejscowosc, string Xkod, string Xulica, int Xwiek, int Xnumer );
    vector < uczniowie > czlowiek;
    fstream plik;
public: //publiczne zmienne i metody
    bool sprawdz;
    int wybor;
    uczniowie();
    void clear();
    void naglowek();
    void dodaj();
    void edytuj();
    void usun();
    void wyswietl_all();
    void wyswietl_some();
    void sciezka();
    void licz_lp();
    void usun_plik();
    void info();
};

uczniowie::uczniowie( string Ximie, string Xnazwisko, string Xmiejscowosc, string Xkod, string Xulica, int Xwiek, int Xnumer ) //konstruktor do klasy uczniowie
    : imie( Ximie )
    , nazwisko( Xnazwisko )
    , miejscowosc( Xmiejscowosc )
    , kod( Xkod )
    , ulica( Xulica )
    , wiek( Xwiek )
    , numer( Xnumer )
{
}

uczniowie::uczniowie()
{
    lp = 1;
    lp_cache = 0;
}

void uczniowie::clear() //czyszczenie strumienia, buforu i flagi bledu
{
    cin.clear();
    cin.sync();
}

void uczniowie::naglowek() //glowny naglowek programu
{
    cout << "\t\t Witaj w programie! Created by Michal Witkowski!" << endl;
    cout << "\t\t       [ Projekt: zadanie domowe z PSiO ]" << endl << endl;
}

void uczniowie::dodaj() //dodawanie ucznia
{
    plik.open( odnosnik.c_str(), ios::binary | ios::app | ios::out );
    sprawdz = plik.good();
    plik.close();
    if( sprawdz == true )
    {
        clear();
        cout << "Podaj imie: ";
        cin >> Ximie;
        cout << "Podaj nazwisko: ";
        cin >> Xnazwisko;
        cout << "Podaj miejscowosc: ";
        cin >> Xmiejscowosc;
        cout << "Podaj kod pocztowy: ";
        cin >> Xkod;
        cout << "Podaj ulice: ";
        cin >> Xulica;
        cout << "Podaj wiek: ";
        cin >> Xwiek;
        cout << "Podaj numer domu: ";
        cin >> Xnumer;
       
        czlowiek.push_back( uczniowie( Ximie, Xnazwisko, Xmiejscowosc, Xkod, Xulica, Xwiek, Xnumer ) );
       
        plik.open( odnosnik.c_str(), ios::binary | ios::app | ios::out );
        plik << lp << ". Imie: " << czlowiek[ lp - 1 ].imie << endl;
        plik << "   Nazwisko: " << czlowiek[ lp - 1 ].nazwisko << endl;
        plik << "   Miejscowosc: " << czlowiek[ lp - 1 ].miejscowosc << endl;
        plik << "   Kod pocztowy: " << czlowiek[ lp - 1 ].kod << endl;
        plik << "   Ulica: " << czlowiek[ lp - 1 ].ulica << endl;
        plik << "   Wiek: " << czlowiek[ lp - 1 ].wiek << endl;
        plik << "   Numer domu: " << czlowiek[ lp - 1 ].numer << endl << endl;
        plik.close();
        lp++;
    }
    else
    {
        cout << "Error! Nie udalo sie otworzyc pliku!" << endl << endl;
        cout << "Mozliwe bledy:" << endl;
        cout << "  - odnosnik do pliku nie zostal podany" << endl;
        cout << "  - odnosnik do pliku jest nieprawidlowy" << endl;
        cout << "  - brak odpowiednich uprawnien w systemie" << endl << endl;
    }
    system( "pause" );
}

void uczniowie::edytuj()
{
   
}

void uczniowie::usun()
{
   
}

void uczniowie::wyswietl_all() //wyswietlanie wszystkich uczniow
{
    plik.open( odnosnik.c_str(), ios::binary | ios::in );
    sprawdz = plik.good();
    plik.close();
    if( sprawdz == true )
    {
        plik.open( odnosnik.c_str(), ios::binary | ios::in );
        while( !plik.eof() )
        {
            getline( plik, napis );
            cout << napis << endl;
        }
        plik.close();
    }
    else
    {
        cout << "Error! Nie udalo sie otworzyc pliku!" << endl << endl;
        cout << "Mozliwe bledy:" << endl;
        cout << "  - odnosnik do pliku nie zostal podany" << endl;
        cout << "  - odnosnik do pliku jest nieprawidlowy" << endl;
        cout << "  - brak odpowiednich uprawnien w systemie" << endl << endl;
    }
    system( "pause" );
}

void uczniowie::wyswietl_some()
{
   
}

void uczniowie::sciezka() //podawanie sciezki do pliku
{
    cout << "Uwaga!!! Pamietaj aby podac prawidlowa sciezke do pliku!" << endl;
    cout << "Podajac sama nazwe pliku np - dane.bin - plik binarny" << endl;
    cout << "zostanie utworzony w katalogu z uruchomionym programem." << endl << endl;
    cout << "Podaj sciezke pliku z rozszerzeniem .bin: ";
    clear();
    getline( cin, odnosnik );
}

void uczniowie::licz_lp()
{
    plik.open( odnosnik.c_str(), ios::binary | ios::app | ios::out );
    sprawdz = plik.good();
    plik.close();
    if( sprawdz == true )
    {
        plik.open( odnosnik.c_str(), ios::binary | ios::app | ios::out );
        while( !plik.eof() )
        {
            clear();
            getline( plik, bufor );
            lp_cache = lp_cache + 1;
            cout << lp_cache;
        }
        plik.close();
        cout << lp_cache;
        lp = lp_cache / 8;
    }
    system( "pause" );
}

void uczniowie::usun_plik() //usuwanie pliku z danymi
{
    remove( odnosnik.c_str() );
    lp = 1;
}

void uczniowie::info() //informacje dodatkowe
{
    cout << "Wykonanie: " << endl;
    cout << "Klasa: III bT (2012/2013)" << endl;
    cout << "Srodowisko: Code::Bloks 10.05" << endl;
    cout << "Kompilator: GNU GCC" << endl;
    cout << "E-mail: " << endl << endl;
    cout << "Dodatkowe:" << endl;
    cout << "   + Program zabezpieczony jest przed 'niesfornym' uzytkownikiem" << endl;
    cout << "     i nie da sie go 'zcrashowac' np podajac litere badz wyraz" << endl;
    cout << "     do zmiennej 'int' (wiek, numer domu)." << endl;
    cout << "   - Nie gwarantuje poprawnosci kodu zrodlowego programu z innymi" << endl;
    cout << "     kompilatorami niz w/w." << endl << endl;
    system( "pause" );
}

int main() //glowna czesc programu
{
    uczniowie uczen;
   
    do
    {
        do
        {
            system( "cls" );
            uczen.naglowek();
            cout << "[1] Dodaj nowego ucznia" << endl;
            cout << "[2] Edytuj ucznia" << endl;
            cout << "[3] Usun ucznia" << endl;
            cout << "[4] Wyswietl wszystkich uczniow" << endl;
            cout << "[5] Wyswietl uczniow na podstawie parametru" << endl;
            cout << "[6] Sciezka do pliku" << endl;
            cout << "[7] Usun plik z danymi" << endl;
            cout << "[8] Wykonanie/Kontakt" << endl;
            cout << "[0] Zakoncz" << endl << endl;
            cout << "Twoj wybor: ";
            uczen.clear();
            cin >> uczen.wybor;
            uczen.sprawdz = cin.good();
            system( "cls" );
        } while( uczen.sprawdz != true );
       
        uczen.naglowek();
       
        switch( uczen.wybor )
        {
        case 1:
            {
                uczen.dodaj();
                break;
            }
        case 2:
            {
                uczen.edytuj();
                break;
            }
        case 3:
            {
                uczen.usun();
                break;
            }
        case 4:
            {
                uczen.wyswietl_all();
                break;
            }
        case 5:
            {
                uczen.wyswietl_some();
                break;
            }
        case 6:
            {
                uczen.sciezka();
                //uczen.licz_lp();
                break;
            }
        case 7:
            {
                uczen.usun_plik();
                break;
            }
        case 8:
            {
                uczen.info();
                break;
            }
        case 0:
            {
                return 0;
            }
        }
    } while( uczen.wybor != 0 );
   
}

Błędy:

c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|47|instantiated from 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = uczniowie]'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_vector.h|737|instantiated from 'void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]'|
C:\Users\Unlimited\Desktop\zadanie.cpp|92|instantiated from here|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\ios_base.h|790|error: 'std::ios_base::ios_base(const std::ios_base&)' is private|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|47|error: within this context|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: synthesized method 'std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\streambuf|770|error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|78|error: within this context|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|instantiated from 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = uczniowie]'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_vector.h|737|instantiated from 'void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]'|
C:\Users\Unlimited\Desktop\zadanie.cpp|92|instantiated from here|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: synthesized method 'std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)' first required here |
C:\Users\Unlimited\Desktop\zadanie.cpp|15|note: synthesized method 'std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\ext\new_allocator.h||In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = uczniowie]':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\ext\new_allocator.h|105|note: synthesized method 'uczniowie::uczniowie(const uczniowie&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\ios_base.h||In member function 'std::basic_ios<char, std::char_traits<char> >& std::basic_ios<char, std::char_traits<char> >::operator=(const std::basic_ios<char, std::char_traits<char> >&)':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|47|instantiated from 'void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_vector.h|741|instantiated from 'void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]'|
C:\Users\Unlimited\Desktop\zadanie.cpp|92|instantiated from here|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\ios_base.h|793|error: 'std::ios_base& std::ios_base::operator=(const std::ios_base&)' is private|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|47|error: within this context|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd||In member function 'std::basic_istream<char, std::char_traits<char> >& std::basic_istream<char, std::char_traits<char> >::operator=(const std::basic_istream<char, std::char_traits<char> >&)':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|53|note: synthesized method 'std::basic_ios<char, std::char_traits<char> >& std::basic_ios<char, std::char_traits<char> >::operator=(const std::basic_ios<char, std::char_traits<char> >&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd||In member function 'std::basic_iostream<char, std::char_traits<char> >& std::basic_iostream<char, std::char_traits<char> >::operator=(const std::basic_iostream<char, std::char_traits<char> >&)':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|59|note: synthesized method 'std::basic_istream<char, std::char_traits<char> >& std::basic_istream<char, std::char_traits<char> >::operator=(const std::basic_istream<char, std::char_traits<char> >&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd||In member function 'std::basic_fstream<char, std::char_traits<char> >& std::basic_fstream<char, std::char_traits<char> >::operator=(const std::basic_fstream<char, std::char_traits<char> >&)':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: synthesized method 'std::basic_iostream<char, std::char_traits<char> >& std::basic_iostream<char, std::char_traits<char> >::operator=(const std::basic_iostream<char, std::char_traits<char> >&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\streambuf||In member function 'std::basic_filebuf<char, std::char_traits<char> >& std::basic_filebuf<char, std::char_traits<char> >::operator=(const std::basic_filebuf<char, std::char_traits<char> >&)':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\streambuf|778|error: 'std::basic_streambuf<_CharT, _Traits>& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|78|error: within this context|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd||In member function 'std::basic_fstream<char, std::char_traits<char> >& std::basic_fstream<char, std::char_traits<char> >::operator=(const std::basic_fstream<char, std::char_traits<char> >&)':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|instantiated from 'void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_vector.h|741|instantiated from 'void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]'|
C:\Users\Unlimited\Desktop\zadanie.cpp|92|instantiated from here|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: synthesized method 'std::basic_filebuf<char, std::char_traits<char> >& std::basic_filebuf<char, std::char_traits<char> >::operator=(const std::basic_filebuf<char, std::char_traits<char> >&)' first required here |
C:\Users\Unlimited\Desktop\zadanie.cpp||In member function 'uczniowie& uczniowie::operator=(const uczniowie&)':|
C:\Users\Unlimited\Desktop\zadanie.cpp|15|note: synthesized method 'std::basic_fstream<char, std::char_traits<char> >& std::basic_fstream<char, std::char_traits<char> >::operator=(const std::basic_fstream<char, std::char_traits<char> >&)' first required here |
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\vector.tcc||In member function 'void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = uczniowie, _Alloc = std::allocator<uczniowie>]':|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\vector.tcc|312|note: synthesized method 'uczniowie& uczniowie::operator=(const uczniowie&)' first required here |
||=== Build finished: 8 errors, 0 warnings ===|

P-79234
Unlimited
Temat założony przez niniejszego użytkownika
» 2013-03-23 19:18:48
Problem rozwiązany.
fstream plik;
musiało być poza klasą tj zadeklarowałem jako zmienna globalna. Kto powie dlaczego nie działało?
P-79235
DejaVu
» 2013-03-23 19:20:39
fstream nie ma konstruktora kopiującego, a tematy dotyczące Twojego problemu kilkakrotnie były już rozwiązane na tym forum.
P-79236
Unlimited
Temat założony przez niniejszego użytkownika
» 2013-03-23 19:22:51
yyy sory ale nie wiem o co chodzi z tym konstruktorem kopiującym dla fstream :/
P-79237
pekfos
» 2013-03-23 19:48:16
To znaczy, że nie można skopiować obiektu fstream.
P-79240
Unlimited
Temat założony przez niniejszego użytkownika
» 2013-03-23 20:03:20
Czyli nigdy nie deklarować pliku w klasie dobrze rozumiem?
P-79243
« 1 »
  Strona 1 z 1