C++ mały błąd - struktury

0
#include <iostream>
#include <istream>
#include <string>
#include <stdlib.h>
#include <fstream>

using namespace std;

struct osoba
{
       string imie;
       string nazwisko;
       string telefon;
       int wiek;
};

int i;
osoba czlowiek[30];


void Dodaj();
void Wyswietl();
void Zapisz();
void Wczytaj();
void Znajdz();
void Usun();
void Sortuj();


int main(){
    
    char wybor;
    
    do
    {
         cout<<"\nWitamy w bazie danych: \n\n";
         cout<<"a - Dodaj osobe\n";
         cout<<"b - Zobacz wszystkie dane\n";
         cout<<"c - Zapisz dane\n";
         cout<<"d - Wczytaj dane\n";
         cout<<"e - Znajdz kogos\n";
         cout<<"f - Usun kogos\n";
         cout<<"g - Sortuj wg. wieku\n";
         cout<<"k - Koniec programu\n";
         
         cin>> wybor;
         while(wybor!='a' && wybor!='b' && wybor!='c' && wybor!='d'
         && wybor!='e' && wybor!='f' && wybor!='g' && wybor!='k')
         {
                       cout<<"Błąd!!! Wcisnij a,b,c,d,e,f,g lub k!\nWybieram:\t";
                       cin>>wybor;
         }
         
         switch(wybor)
         {
                      case 'a' : Dodaj();
                      break;
                      case 'b' : Wyswietl();
                      break;
                      case 'c' : Zapisz();
                      break;
                      case 'd' : Wczytaj();
                      break;
                      case 'e' : Znajdz();
                      break;
                      case 'f' : Usun();
                      break;
                      case 'g' : Sortuj();
                      break;
         }
         
    }
    while(wybor!='k');
    return 0;
}

void Dodaj()
{
     cout<<"Podaj imie:\t";
     cin>>czlowiek[i].imie;
     cout<<"\nPodaj nazwisko:\t";
     cin>>czlowiek[i].nazwisko;
     cout<<"\nPodaj wiek:\t";
     cin>>czlowiek[i].wiek;
     cout<<"\nPodaj telefon:\t";
     cin>>czlowiek[i].telefon;
     
     i++;
     
     cout<<"Zostala dodaja osoba\n";
     cout<<"Liczba osob w bazie "<<i<<"\n";
}

void Wyswietl()
{
     
     if(i !=0)
     {
          cout<<"Dane w pliku to :\n\n\n";
          for(short j=0; j<i; j++)
          {
                    cout<<"Osoba "<<j+1<<" : \n";
                    cout<<"Imie : "<<czlowiek[j].imie<<"\n";
                    cout<<"Nazwisko : "<<czlowiek[j].nazwisko<<"\n";
                    cout<<"Wiek : "<<czlowiek[j].wiek<<"\n";
                    cout<<"Telefon : "<<czlowiek[j].telefon<<"\n";
          
          }
          cout<<"Liczba osób w bazie "<<i<<"\n\n";
     }
     else
     {
         cout<<"Nie podano żadnej osoby";
     }
}

void Zapisz()
{
     
     ofstream plik("baza.txt", ios::out | ios::trunc);
     plik<<i<<"\n";
     
     for(short j=0;j<i;j++)
     {
               plik<<czlowiek[j].imie<<"\n";
               plik<<czlowiek[j].nazwisko<<"\n";
               plik<<czlowiek[j].wiek<<"\n";
               plik<<czlowiek[j].telefon<<"\n";
               
     }
     cout<<"Dane zostaly zapisane\n";
}

void Wczytaj()
{
     
     ifstream plik("baza.txt", ios::in);
     plik>>i;
     int j=0;
     
     do
     {
         plik>>czlowiek[j].imie;
         plik>>czlowiek[j].nazwisko;
         plik>>czlowiek[j].wiek;
         plik>>czlowiek[j].telefon;
         j++;
     }
     while( !plik.eof() );
     
            cout<<"Wczytano dane\n";
}

void Znajdz()
{
     
     if ( i != 0 )
     {
          string imie;
          cout<<"Podaj imie:\t";
          cin>>imie;
          
          for(int j=0;j<i;j++)
          {
                  if(imie == czlowiek[j].imie)
                  {
                          cout<<"\n\n";
                          cout<<"Znaleziono osobe o indexie: "<<j+1<<"\n";
                          cout<<czlowiek[j].imie<<"\n";
                          cout<<czlowiek[j].nazwisko<<"\n";
                          cout<<czlowiek[j].wiek<<"\n";
                          cout<<czlowiek[j].telefon<<"\n";
                          
                  }
          }
          
     }
     else
     {
         cout<<"Nie ma nikogo w bazie\n";
     }
     
     
}

void Usun()
{
     
     int kogo;
     if(i!=0)
     {
             cout<<"Podaj index osoby do usuniecia\n";
             cin>>kogo;
             if(kogo>i || kogo<0)
             {
                       cout<<"Nie ma osoby o tym indexie, sprawdz dostepne osoby\n";
             }
             else
             {
                 for (int k=kogo;k<i;k++)
                 {
                     czlowiek[k-1].imie = czlowiek[k].imie;
                     czlowiek[k-1].nazwisko = czlowiek[k].nazwisko;
                     czlowiek[k-1].wiek = czlowiek[k].wiek;
                     czlowiek[k-1].telefon = czlowiek[k].telefon;
                 }
                 i--;
                 
                 cout<<"Osoba o podanym indexie została usunięta\n";
                 cout<<"Liczba osób w bazie: "<<i<<"\n";
                 Zapisz();
             }
     }
     else
     {
         cout<<"Nie ma nikogow w bazie\n";
     }
     
     
}

void Sortuj()
{
     unsigned int licznik;
     osoba temp;
     
     do
     {
           licznik=0;
           for(int a=0;a<(i-1);a++)
           {
                   if(czlowiek[a].wiek>czlowiek[a+1].wiek)
                   {
                                                          temp = czlowiek[a].wiek;
                                                          czlowiek[a].wiek = czlowiek[a+1].wiek;
                                                          czlowiek[a+1]=temp;
                                                          licznik++;
                   }
           }
     }
     while(licznik>0);
     
}






 

temp = czlowiek[a].wiek;
w tej lini wywala mi błąd reszta działa
teraz tylko ptyanie ponieważ takie błedy mi pokazuje kompilator:

test.cpp In function `void Sortuj()':
test.cpp no match for 'operator=' in 'temp = czlowiek[a].osoba::wiek'
test.cpp:10 candidates are: osoba& osoba::operator=(const osoba&)

nadałem wartości temp typ struktury osoba

0

temp = czlowiek[a].wiek; ????

To nie ma żadnego sensu! temp to osoba a wiek to int.
A dlaczego nie używasz std::swap<osoba>(czlowiek[a], czlowiek[a+1]); ?

Pozdrawiam serdecznie

0
Lex napisał(a)

temp = czlowiek[a].wiek; ????

To nie ma żadnego sensu! temp to osoba a wiek to int.
A dlaczego nie używasz std::swap<osoba>(czlowiek[a], czlowiek[a+1]); ?

Pozdrawiam serdecznie

Hmm std o ile się nie myle zastępuje sobie u góry using namespace
a jeżeli chodzi o funkcje swap to nie mam pojęcia, że taka istnieje :)
Uczę się dopiero C i nie znam wszystkich funkcji.
Programuje w PHP i jest troche róznicy.

Popełniłem głupi błąd :) i dziękuje za pomoc.
chciałem do zmiennej osoba przypisać tylko jedną wartość.
Poprawnie jest:

                                                          temp = czlowiek[a];
                                                          czlowiek[a] = czlowiek[a+1];
                                                          czlowiek[a+1]=temp;
                                                          licznik++;
 

Pozdrawiam

0

PHP to nie jest programowanie tylko skryptowanie.

Pozdrawiam serdecznie

0

@Azarien najwidoczniej "skryptowanie" od "programowania" się różni skoro autor z takim problemem leci na forum.

1 użytkowników online, w tym zalogowanych: 0, gości: 1