Chyba ve mne nebo v g++?
Marian `deBUG' Kralik
mkralik na nextra.sk
Čtvrtek Září 7 11:51:27 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