Tu jest kod tej listy:
template <typename typ>
class lista
{
private:
class element
{
public:
element *następny;
element *poprzedni;
unsigned long long int id;
typ wartość;
element(unsigned long long int parametr_identyfikator, typ parametr_wartość)
{
id=parametr_identyfikator;
wartość=parametr_wartość;
}
element(unsigned long long int parametr_identyfikator)
{
id=parametr_identyfikator;
wartość=NULL;
}
};
element *obiekt;
element *aktualny;
element *pierwszy;
public:
void operator=(lista wynik)
{
równa(wynik);
}
void operator+=(lista dodawana_lista)
{
dodaj(&dodawana_lista);
}
void operator+(typ wartość)
{
dodaj(wartość);
}
void operator-(unsigned long long int identyfikator)
{
usuń(identyfikator);
}
void operator()(unsigned long long int identyfikator, typ nowa_wartość)
{
edytuj(identyfikator,nowa_wartość);
}
bool operator==(lista porównanie)
{
unsigned long long int ilość=ilość();
if(ilość!=porównanie.ilość())
{
return false;
}
else
{
for(unsigned long long int i=0;i<ilość;i++)
{
if(wartość(i)!=porównanie.wartość(i))
{
return false;
}
}
}
return true;
}
bool operator>(lista porównanie)
{
if(ilość()>porównanie.ilość())
{
return true;
}
else
{
return false;
}
}
bool operator<(lista porównanie)
{
if(ilość()<porównanie.ilość())
{
return true;
}
else
{
return false;
}
}
bool operator>=(lista porównanie)
{
unsigned long long int ilość=ilość();
if(ilość!=porównanie.ilość())
{
if(ilość<porównanie.ilość())
{
return false;
}
}
else
{
for(unsigned long long int i=0;i<ilość;i++)
{
if(wartość(i)!=porównanie.wartość(i))
{
return false;
}
}
}
return true;
}
bool operator<=(lista porównanie)
{
unsigned long long int ilość=ilość();
if(ilość!=porównanie.ilość())
{
if(ilość>porównanie.ilość())
{
return false;
}
}
else
{
for(unsigned long long int i=0;i<ilość;i++)
{
if(wartość(i)!=porównanie.wartość(i))
{
return false;
}
}
}
return true;
}
typ operator[](int identyfikator)
{
return wartość(identyfikator);
}
void dodaj()
{
if(pierwszy==NULL)
{
obiekt=new element(0);
pierwszy=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=NULL;
}
else
{
aktualny=pierwszy;
while(!aktualny->następny==NULL)
{
aktualny=aktualny->następny;
}
obiekt=new element(aktualny->id+1);
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
}
}
void dodaj(typ wartość)
{
if(pierwszy==NULL)
{
obiekt=new element(0, wartość);
pierwszy=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=NULL;
aktualny=obiekt;
}
else
{
aktualny=pierwszy;
while(!aktualny->następny==NULL)
{
aktualny=aktualny->następny;
}
obiekt=new element(aktualny->id+1, wartość);
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
}
}
void dodaj(typ *wartość, unsigned long long int ilość)
{
if(pierwszy==NULL)
{
obiekt=new element(0, wartość[0]);
pierwszy=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=NULL;
aktualny=obiekt;
}
else
{
aktualny=pierwszy;
while(!aktualny->następny==NULL)
{
aktualny=aktualny->następny;
}
obiekt=new element(aktualny->id+1, wartość[0]);
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
aktualny=obiekt;
}
for(unsigned long long int i=1;i<ilość;i++)
{
obiekt=new element(aktualny->id+1, wartość[i]);
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
aktualny=obiekt;
}
}
void dodaj(lista *dodawana_lista)
{
if(pierwszy==NULL)
{
obiekt=new element(0,dodawana_lista->wartość(0));
pierwszy=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=NULL;
aktualny=obiekt;
}
else
{
aktualny=pierwszy;
while(!aktualny->następny==NULL)
{
aktualny=aktualny->następny;
}
obiekt=new element(aktualny->id+1, dodawana_lista->wartość(0));
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
aktualny=obiekt;
}
unsigned long long int ilość=dodawana_lista->ilość();
unsigned long long int i=1;
while(i<ilość)
{
obiekt=new element(aktualny->id+1, dodawana_lista->wartość(i));
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
aktualny=obiekt;
i++;
}
}
void usuń(unsigned long long int identyfikator)
{
if(pierwszy!=NULL)
{
aktualny=pierwszy;
if(pierwszy->id==identyfikator)
{
if(pierwszy->następny==NULL)
{
pierwszy=NULL;
aktualny=NULL;
}
else
{
pierwszy=pierwszy->następny;
pierwszy->poprzedni=NULL;
}
}
else
{
while(true)
{
if(aktualny==NULL)
{
break;
}
if(aktualny->id==identyfikator)
{
if(aktualny->następny!=NULL)
{
aktualny->następny->poprzedni=aktualny->poprzedni;
aktualny->poprzedni->następny=aktualny->następny;
}
else
{
aktualny->poprzedni->następny=NULL;
}
break;
}
aktualny=aktualny->następny;
}
}
unsigned long long int i=0;
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
aktualny->id=i;
aktualny=aktualny->następny;
i++;
}
}
}
void usuń_adres(element *adres)
{
if(adres!=NULL)
{
if(adres->następny==NULL)
{
aktualny->poprzedni->następny=NULL;
}
else if(adres->poprzedni==NULL)
{
aktualny->następny->poprzedni=NULL;
}
else
{
aktualny->następny->poprzedni=aktualny->poprzedni;
aktualny->poprzedni->następny=aktualny->następny;
}
unsigned long long int i=0;
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
aktualny->id=i;
aktualny=aktualny->następny;
i++;
}
}
}
void edytuj(unsigned long long int identyfikator, typ nowa_wartość)
{
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
else
{
if(aktualny->id==identyfikator)
{
aktualny->wartość=nowa_wartość;
break;
}
aktualny=aktualny->następny;
}
}
}
void równa(lista wynik)
{
delete[] obiekt;
pierwszy=NULL;
aktualny=NULL;
dodaj(&wynik);
}
void czyść()
{
delete[] obiekt;
aktualny=NULL;
pierwszy=NULL;
}
void sortuj_rosnąco()
{
element *adres=NULL;
element *tmp=pierwszy;
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
else
{
typ min=aktualny->wartość;
while(true)
{
if(tmp==NULL)
{
break;
}
if(tmp->wartość<=min)
{
min=tmp->wartość;
adres=tmp;
}
tmp=tmp->następny;
}
typ tmp_wartość=aktualny->wartość;
aktualny->wartość=adres->wartość;
adres->wartość=tmp_wartość;
}
aktualny=aktualny->następny;
tmp=aktualny;
}
}
void sortuj_malejąco()
{
element *adres=NULL;
element *tmp=pierwszy;
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
else
{
typ min=aktualny->wartość;
while(true)
{
if(tmp==NULL)
{
break;
}
if(tmp->wartość>=min)
{
min=tmp->wartość;
adres=tmp;
}
tmp=tmp->następny;
}
typ tmp_wartość=aktualny->wartość;
aktualny->wartość=adres->wartość;
adres->wartość=tmp_wartość;
}
aktualny=aktualny->następny;
tmp=aktualny;
}
}
unsigned long long int ilość()
{
if(pierwszy==NULL)
{
return NULL;
}
aktualny=pierwszy;
unsigned long long int wynik=0;
while(true)
{
if(aktualny==NULL)
{
break;
}
wynik++;
aktualny=aktualny->następny;
}
return wynik;
}
unsigned long long int szukaj(typ wartość)
{
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
if(aktualny->wartość==wartość)
{
return aktualny->id;
break;
}
aktualny=aktualny->następny;
}
return NULL;
}
element *szukaj_adres(typ wartość)
{
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
if(aktualny->wartość==wartość)
{
return aktualny;
break;
}
aktualny=aktualny->następny;
}
return NULL;
}
element *adres(unsigned long long int identyfikator)
{
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
if(aktualny->id==identyfikator)
{
return aktualny;
break;
}
aktualny=aktualny->następny;
}
return NULL;
}
typ wartość(unsigned long long int identyfikator)
{
aktualny=pierwszy;
while(true)
{
if(aktualny==NULL)
{
break;
}
if(aktualny->id==identyfikator)
{
return aktualny->wartość;
break;
}
aktualny=aktualny->następny;
}
return NULL;
}
lista()
{
pierwszy=NULL;
aktualny=NULL;
obiekt=NULL;
}
lista(long long int ilość)
{
obiekt=new element(0);
pierwszy=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=NULL;
aktualny=pierwszy;
for(long long int i=1;i<ilość;i++)
{
obiekt=new element(aktualny->id+1);
aktualny->następny=obiekt;
obiekt->następny=NULL;
obiekt->poprzedni=aktualny;
aktualny=aktualny->następny;
}
}
~lista()
{
delete[] obiekt;
delete[] aktualny;
delete[] pierwszy;
}
};
Jeśli możecie sprawdzicie też inne błędy bo ten błąd jednak nie pojawia się tylko przy kopiowaniu.