Mam mały problem z wypisywaniem na ekran elementów ze struktury umieszczonej w klasie.
//EDIT sorry za wcześniejszy kod, ale pomieszałem 2 różne kody, tak to jest jak się coś robi w pośpiechu.
Prawidłowy Kod:
#include
struct Osoba
{
enum Plec{K,M};
Osoba(Plec p) : plec(p) {}
Plec plec;
};
class Kolko
{
public:
Kolko();
~Kolko();
bool pusta();
bool usunPierwszy();
unsigned int dolacz(Osoba* s);
void uczestnicy() const;
bool czyJest(Osoba* osoba, unsigned int n);
private:
struct Link
{
Osoba* s;
Link* next;
Link* prev;
bool prowadzacy;
unsigned int iden;
Link(Osoba* s = 0, Link* next = 0, Link* prev = 0, bool prowadzacy = 0, unsigned int iden = 0)
{
this->s = s;
this->next = next;
this->prev = prev;
this->prowadzacy = prowadzacy;
this->iden = iden;
}
}; Link* head;
};
unsigned int identyfikator = 0;
Kolko::Kolko()
{
head = new Link(0, NULL, NULL, 1, 0); //tworzymy prowadzacego, unikalny char jego to pp, identyfikator 0 i oznaczenie typu bool, ze to on
}
Kolko::~Kolko()
{
while(!pusta())
usunPierwszy(); //usuwanie
}
bool Kolko::pusta()
{
return head == 0;
}
bool Kolko::usunPierwszy()
{
if(pusta())
return false;
Link* pos = head->next;
delete head;
head = pos;
return true;
}
unsigned int Kolko::dolacz(Osoba* osoba)
{
if(czyJest(osoba, 0)) //jesli osoba w kolku zwroc 0, napisalem taka funkcje i dziala
return 0;
Link* pos = head; // za pomoca pos dochodzimy do prowadzacego, bo uczestnicy nowi dolaczaja tak by byc jego lewym sasiadem
while(pos->prowadzacy != 1)
{
pos = pos->next;
}
identyfikator++;
Link* tmp = new Link(osoba, pos, pos->prev, 0, identyfikator); //nadajemy kazdemu nowemu nowy identyfikator
pos->prev = tmp;
return identyfikator; //zwracamy identyfikator
}
void Kolko::uczestnicy() const
{
Link* pos = head; //mamy wypisywac od lewego sasiada prowadzacego, bez niego samego
while(pos->prowadzacy != 1)
{
pos = pos->next;
}
while(pos->prev != NULL) //wypisujemy od lewego sasiada
{
std::cout <<"plec: " << pos->s->plec << ", nr: " << pos->iden << "\n";
pos = pos->prev;
}
}
bool Kolko::czyJest(Osoba* osoba, unsigned int n)
{
Link* pos = head;
if(osoba != 0)
{
while(pos->next != NULL)
{
if(pos->s == osoba)
{
return true;
}
pos = pos->next;
}
return false;
} else {
while(pos->next !=NULL)
{
if(pos->iden == n)
{
return true;
}
pos = pos->next;
}
return false;
}
}
Podczas testowania takim czymś:
Kolko s;
Osoba p(Osoba::K);
Osoba q(Osoba::M);
s.dolacz(&p);
s.dolacz(&q);
s.uczestnicy();
Program się crashuje. Konczy aplikację i tyle. Kompilator milczy - kwestia błędnego zapisania kodu przeze mnie - wpatrywanie w kod niestety nic mi nie daje, jedynie oczy zaczynają mnie boleć.