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

Wczytywanie pliku i błąd 'no match for operator'

Ostatnio zmodyfikowano 2018-08-19 18:21
Autor Wiadomość
konto_usunięte
Temat założony przez niniejszego użytkownika
Wczytywanie pliku i błąd 'no match for operator'
» 2018-08-17 09:42:44
Witam
Piszę prosty program bazy danych, która ma być wczytywana z pliku. Mam w nim taką strukturę:
C/C++
struct osoba
{
    char imie[ 20 ];
    char nazwisko[ 30 ];
    char miejscowosc[ 20 ];
}

I chciałbym do niej wczytać wartości z pliku:
C/C++
void Wczytaj()
{
    ifstream plik;
    plik.open( "baza.dat", ios::in );
    if( plik.fail() )
    {
        plik.close();
        return;
    }
    plik >> ile_osob; // ile_osob jest int globalną
    for( int i = 1; i < ile_osob; i++ )
    {
        plik >> Baza[ i ].imie;
        plik >> Baza[ i ].nazwisko;
        plik >> Baza[ i ].miejscowosc;
    }
}


EDIT:
zapomniałem: Baza[] to:
C/C++
struct osoba Baza[ 100 ];

Kompilator wywala:
[Error] no match for 'operator>>' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'int [10]')

i zaznacza:

C/C++
plik >> Baza[ i ].imie;

Co tu jest źle?

Proszę o pomoc
P-172130
pekfos
» 2018-08-17 14:11:53
Podaj cały kod.
P-172135
konto_usunięte
Temat założony przez niniejszego użytkownika
» 2018-08-19 10:31:03
C/C++
#include <iostream>

#include <conio.h>
#include <fstream>
#include <windows.h>

using namespace std;

int ID0; //wolny ID osoby

struct osoba
{
    char imie[ 20 ];
    char nazwisko[ 30 ];
    char miejscowosc[ 20 ];
};
struct osoba Baza[ 1024 ];

void Zapisz()
{
    ofstream plik;
    plik.open( "baza.dat", ios::out );
    if( plik.fail() )
    {
        plik.close();
        return;
    }
   
    plik << ID0;
    for( int i = 1; i < ID0; i++ )
    {
        plik << Baza[ i ].imie;
        plik << Baza[ i ].nazwisko;
        plik << Baza[ i ].miejscowosc;
    }
}

void Wczytaj()
{
    ifstream plik;
    plik.open( "baza.dat", ios::in );
    if( plik.fail() )
    {
        plik.close();
        return;
    }
   
    plik >> ID0;
    for( int i = 1; i < ID0; i++ )
    {
        plik >> Baza[ i ].imie;
        plik >> Baza[ i ].nazwisko;
        plik >> Baza[ i ].miejscowosc;
    }
}


void DodajOs()
{
   
}

void UsunOs()
{
   
}

void WyswietlB()
{
   
}

void Szukaj()
{
   
}


bool Menu()
{
    system( "cls" );
    cout << "[1] Dodaj osobe";
    cout << "[2] Usun osobe";
    cout << "[3] Wyswietl baze";
    cout << "[4] Szukaj osoby";
    cout << "[5] Wyjdz";
    int kl = getch();
    switch( kl )
    {
    case 49: DodajOs();
    case 50: UsunOs();
    case 51: WyswietlB();
    case 52: Szukaj();
    case 53: return false;
    }
}


int main()
{
    system( "cls" );
    cout << "Wczytywanie danych...";
    Wczytaj();
    bool start = true;
    while( start == true )
    {
        start = Menu();
    }
}
P-172175
pekfos
» 2018-08-19 18:21:47
To nie jest właściwy kod do podanego błędu. Ten się kompiluje.

C/C++
char imie[ 20 ];
char nazwisko[ 30 ];
char miejscowosc[ 20 ];
Albo używaj std::string, albo użyj wczytywania zabezpieczonego przed przepełnieniem bufora.
P-172176
« 1 »
  Strona 1 z 1