Chyba ve mne nebo v g++?

Marian `deBUG' Kralik mkralik na nextra.sk
Čtvrtek Září 7 11:55:14 CEST 2000


Zdravim,

podla mna je chyba bohuzial vo vas. Nemal som to moznost vyskusat 
pod linuxom ( odkracal mi disk ).
Predpokaldam, ze je to len umely zjednoduseny priklad. Ked uz 
chcete riesit iteracie prostrednictvom iteratora vo vnutry classu, je 
dobre ho aj inicializovat pred startom iteracneho kolotoca v 
prislusnom classe ( vec nazoru ).
Problem, ale spociva v nasledujucom:

list<Test>              tList;
list<Test>::iterator    tIter;
Test                    t1;

 t1.addToList("t1-s1");
 t1.addToList("t1-s2");
 t1.sIter = t1.sList.begin();

 tList.push_back(t1);

posledny riadok vlozi do 'tList'-u KOPIU premennej 't1'. Vzhladom na 
to, ze nemate definovany 'copy-constructor', pouzije sa default a ten 
skopiruje 'sList' spravne, ale skopiruje hodnotu iteratora z 't1.sIter' 
kde bola nastavena na zaciatok listu 't1.sList' (nahodou, pretoze v 
default kostruktore originalu sa takto nastavila - to moze byt zavisle 
od platformy&kompilatora ). Takto samozrejme nemoze zafungovat 
test v 'getNext()'.

Staci doplnit do 'class Test'
Test(){sIter = sList.begin();} //je to slusnost
Test( const Test& toCopy ){
 sList = toCopy.sList;
 sIter = sList.begin(); 
}

Skuste dat nasledujuci riadok za horeuvedeny fragment z 'main' a 
bude to jasne
t1.addToList("t1-s3");

S pozdravom
deBUG



Další informace o konferenci Linux