Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Luokkien tulostaminen map-rakenteesta

Kippari [25.10.2013 22:56:33]

#

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
}
(Aborted

Eli kuinka saan haluamani hakutiedon kohdalta tulostettua luokan kaksi dequeta iteraattorien avulla?

Mod. korjasi kooditagit: virheilmoitus ei ole C++-koodia.

Metabolix [26.10.2013 00:29:47]

#

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ä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta