Proszę o znalezienie błędu w kodzie - Listy STL c++

0

Proszę o pomoc w znalezieniu błędu w kodzie.
Coś musi być chyba nie tak z dodawaniem nowego elementu listy

#include<list>
#include "Pracownik.cpp"
#include <conio.h>
void czysc_ekran(int x,int y)
{
    for(int i=y;i<50;i++)
    {
        for(int j=x;j<x+50;j++)
        {
            gotoxy(j,i);
            cout<<" ";
        }
    }
}
void wyswietl_pracownikow(list<Pracownik*>pr,int x,int y)
{
    char znak;
    int z=y;
    list<Pracownik*>::iterator it=pr.begin();
        if(it==pr.end())return;
        do
        {
            gotoxy(x,z++);cout<<"Przewijaj strzalkami. Backspace konczy przegladanie";
            gotoxy(x,z++);cout<<"Imie: "<<(*it)->getImie();
            gotoxy(x,z++);cout<<"Nazwisko: "<<(*it)->getNazwisko();
            gotoxy(x,z++);cout<<"Stanowisko/Dzial: "<<(*it)->getStanowisko();
            znak = getch();
            if(znak==80) it++;
            else if(znak==72)
            {
                if(it==pr.begin())
                {
                    it=pr.end();
                    it--;
                }
                else it--;
            }
            if(it == pr.end()) it=pr.begin();
        }while(znak!=13);
        getch();
}
void usun_pracownika(list<Pracownik*>pr,int x,int y)
{
    string imie,nazwisko,dzial;
    gotoxy(x,y);
    cout<<"Podaj imie pracownika do usuniecia: ";
    cin>>imie;
    gotoxy(x,y+1);
    cout<<"Podaj nazwisko pracownika do usuniecia: ";
    cin>>nazwisko;
    gotoxy(x,y+2);
    cout<<"Podaj stanowisko/dzial pracownika do usuniecia: ";
    cin>>dzial;
    for(list<Pracownik*>::iterator it=pr.begin();it!=pr.end();it++)
    {
        if((*it)->getImie()==imie&&(*it)->getNazwisko()==nazwisko&&(*it)->getStanowisko()==dzial)
        {
            pr.erase(it);
        }
    }
}
void wykonaj_dzialanie(int pozycja_menu,list<Pracownik*>pr)
{
    int x=25;
    if(pozycja_menu==0)
                {
                    pr.push_back(new Pracownik(30,0));
                    czysc_ekran(30,0);
                }
                if(pozycja_menu==1)
                {
                    usun_pracownika(pr,30,0);
                    czysc_ekran(30,0);
                    ///usunPracownika
                }
                if(pozycja_menu==2)
                {
                    ///sortujPracownikow
                }
                if(pozycja_menu==3)
                {
                    wyswietl_pracownikow(pr,30,0);
                    czysc_ekran(30,0);
                    ///wyswietlPracownikow
                }
                if(pozycja_menu==4)
                {
                    ///wyliczPensjePracownika
                }
}
2

Dokładnie ten sam problem co w kodzie poniżej:

void foo(int value)
  {
   value=666;
  }

int main()
  {
   int x=13;
   foo(x);
   cout<<"x="<<x<<"; czemu ten x wciaz ma wartosc 13?"<<endl;
   return 0;
  }

Oprócz tego:

  1. Nie używaj polskich nazw
  2. Nie używaj i++ http://4programmers.net/Forum/1101404
  3. Przyda ci się to: http://4programmers.net/Forum/1100492
0

Dzięki za ten kod. Przydał się i to bardzo. Użyłem referencji do listy i działa.
Ale czemu mam nie używać polskich nazw? Jak na razie nie znam angielskiego. Nie cierpię tego języka.

5
void wypolni(unsigned nomer,list<Robotnik*> &ro)
  {
   switch(nomer)
     {
      case 0: ro.push_back(new Robotnik(30,0)); break;
      case 1: udali_robotnika(ro,30,0); break;
      case 2: robotniki_po_alfawitu(ro); break;
      case 3: pokazhi_robotnikow(ro,30,0); break;
      case 4: poschitaj_zarplatu_rabotnikam(ro); break;
     }
   pustoj_ekran(30,0);
  }

A teraz rozumiesz czemu?

0

po jakiemu to jest napisane.

1

Jaka ci różnica, grunt że nie masz zielonego pojęcia co to i z czym to się je.
A to akurat zoptymalizowana wersja twego wykonaj_dzialanie() oraz dobry przykład czemu nie używać nazewnictwa polskiego.

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