Tarvitsen harjoitustyössäni seuraavanlaista luokkaa:
class Pala
{
typedef map<string, Pala> palamappi;
public:
void tallenna_pala (deque<string> syotteen_tiedot);
void tulosta_pala (deque<string> syotteen_tiedot, palamappi palamappi);
void kaanna_pala ();
void tulosta_rinnakkain ();
private:
deque<unsigned int> palan_luvut;
deque<string> palan_merkit;
};Lisäksi tarvitsen map-rakennetta, jossa hakuavaimena on palan nimi ja datatyyppinä luokka Pala:
map<string, Pala> palamappi;
Nyt haluaisin tulostaa mapista haluamani palan. Ongelma on se, että en tiedä miten oikea notaatio tulisi kirjoittaa Olen yrittänyt seuraavaa:
void Pala::tulosta_pala(deque<string> syotteen_tiedot, palamappi palamappi)
{
string palan_nimi = syotteen_tiedot.at(1);
palamappi::iterator it = palamappi.find(syotteen_tiedot.at(1));
cout << "(";
for (deque<unsigned int>::iterator luku_it = it -> second.palan_luvut.begin(); luku_it != palan_luvut.end(); luku_it++)
{
cout << *luku_it << " ";
}
cout << '\b' << ")" << endl;
//deque<string>::iterator luku_it = it -> second;
for (deque<string>::iterator merkki_it = it -> second.palan_merkit.begin(); merkki_it != palan_merkit.end(); merkki_it++)
{
cout << *merkki_it << endl;
}
// deque<string>::iterator merkki_it
}Menee kääntäjästä läpi, mutta ajaessa saan virheilmoituksen:
/usr/local/gcc/gcc-4.8.1/include/c++/4.8.1/debug/safe_iterator.h:542:error:
attempt to compare iterators from different sequences.
Objects involved in the operation:
iterator "lhs" @ 0x0xbfd2954c {
type = N11__gnu_debug14_Safe_iteratorINSt9__cxx199815_Deque_iteratorIjRjPjEENSt7__debug5dequeIjSaIjEEEEE (mutable iterator);
state = dereferenceable (start-of-sequence);
references sequence with type `NSt7__debug5dequeIjSaIjEEE' @ 0x0xbfd2954c
}
iterator "rhs" @ 0x0xbfd295b0 {
type = N11__gnu_debug14_Safe_iteratorINSt9__cxx199815_Deque_iteratorIjRjPjEENSt7__debug5dequeIjSaIjEEEEE (mutable iterator);
state = past-the-end;
references sequence with type `NSt7__debug5dequeIjSaIjEEE' @ 0x0xbfd295b0
}
(AbortedEli kuinka saan haluamani hakutiedon kohdalta tulostettua luokan kaksi dequeta iteraattorien avulla?
Mod. korjasi kooditagit: virheilmoitus ei ole C++-koodia.
Tuossahan lukee ihan selvällä kielellä, mistä virhe johtuu: yrität vertailla kahden eri dequen iteraattoreita. Koodistakin virhe näkyy heti: for-silmukoissasi begin-kutsussa on it->second mutta end-kutsussa ei.
Lisäksi sinun kannattaisi kyllä opetella käyttämään viittauksia ja vakioita. Nykyinen koodisi nimittäin luo hirmuisen määrän kopioita kaiken maailman jonoista ja mapeista ja niiden sisältämistä Pala-olioista. Lisää kaikkiin yllä näkyviin parametreihin tyypin ja nimen väliin ”const&” ja käytä iterator-tyypin sijaan const_iterator-tyyppiä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.