onkos tuo luokka homma oikein...?

pertti

Ja mites kirjottasin tolle luokalle "int main()"-osan silleen että voin ite syöttää tiedot jokaisesta autosta?

Ja sit vielä, mitäs muuta vikaa seuraavassa ohjelmassa vois olla? Testailin tuota valmiiks syötetyillä tiedoilla mut se valitti aina et syötetty tieto on "undefined symbol"... tai vastaavaa. Vikahan ei tieten tuossa luokassa oo vaan ite main-osassa. Tarkotus kuiten olis et sen sais ite syötettyä sen tiedon sinne joten ehkä ongelmaki häipys samantien jos sais ton main osan tehtyä. Pientä osviittaa vaan kaipais.
___________________________
class cAuto
{
private:
   char m_nimi;
   char m_merkki;
   int m_ika;
   char m_luokka;
public:
   char nayta_nimi(void);
   void syota_nimi(char);
   char nayta_merkki(void);
   void syota_merkki(char);
   int nayta_ika(void);
   void syota_ika(int);
   char nayta_luokka(void);
   void syota_luokka(char);
};
char cAuto::nayta_nimi()
{
   return m_nimi;
}
void cAuto::syota_nimi(char uus_nimi)
{
   m_nimi = uus_nimi;
}
char cAuto::nayta_merkki()
{
   return m_merkki;
}
void cAuto::syota_merkki(char uus_merkki)
{
   m_merkki=uus_merkki;
}
int cAuto::nayta_ika()
{
   return m_ika;
}
void cAuto::syota_ika(int uus_ika)
{
   m_ika=uus_ika;
}
char cAuto::nayta_luokka()
{
   return m_luokka;
}
void cAuto::syota_luokka(char uus_luokka)
{
   m_luokka=uus_luokka;
}

/********************************************/

6

609

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • mendelsson

      Tässä on sitä rautalankaa ja vähän pääohjelman alkua jonka jopa testasinkin. Muutin vielä charit stringeiksi. Ei se luokan rakennekkaan ihan kondiksessa ollut.


      #include
      #include

      using namespace std;
      class cAuto
      {
      private:
      string m_nimi;
      string m_merkki;
      int m_ika;
      string m_luokka;

      public:
      string nayta_nimi(void) {return m_nimi;}
      void syota_nimi(string nimi) {m_nimi = nimi;}
      string nayta_merkki(void) {return m_merkki;}
      void syota_merkki(string merkki) {m_merkki = merkki;}
      int nayta_ika(void) {return m_ika;}
      void syota_ika(int ika) {m_ika = ika;}
      string nayta_luokka(void) {return m_luokka;}
      void syota_luokka(string luokka) {m_luokka = luokka;}
      };

      int main(int argc, char *argv[])
      {
      cAuto a;
      string n;
      coutn;
      a.syota_nimi(n);
      cout

    • katsottuna

      Luokkamääritelmä vaikutti oikealta (tosin olit määritellyt muuttuja char, eli niihin ei mahdu kuin yksi merkki (siis kirjain, numero tai vastaava, ei automerkki!)

      Vika on todennäköisesti pääohjelman puolella.

      Undeclared - tarkoittaa että et ole kertonut jonkun rakenteesta riittävästi jotta kääntäjä ymmärtäisi mitä on kysymys (se sinun lähettämäsi koodi pätkä oli declaration, eli kerroit luokan periaatteellisen rakenteen yksiselitteisesti)

      Ennen kun voit käyttää luokkaa, sinun on varattava muistia sille:

      Undefined tarkoittaa että yrität käyttää muuttujaa jolle ei ole varattu muistia:

      Luokalle voit varata muistia monella eri tavalla.

      Yksinkertaisin tapa vain muuttujalla:

      jokuluokka a; //jossa a on muuttujan nimi

      a.tee_jotain(joku_parametri); //on tapa jolla käytät tätä luokka

      Tällöin muuttujan a elinikä (scope) on vain niin pitkä kun sen ympäröimä ohjelmakokonaisuus (esim vain aliohjelman sisällä. Tällaista konstruktiota käytetään apumauuttujana aliohjelman sisällä tai ehkä globaalimuuttujana ellei käytetä enemmän kuin yksi määritelmä kyseisestä luokasta.

      Tavallisesti tarvitset samasta luokasta monta määritelmää (tuskinpa teit tuon autoluokan sen takia että syötät ainoastaan yhden auton tiedot!)

      Silloin ei ole järkevää käyttää muuttujanimiä (kuten a, b, c...) vaan allokoidaan jokaiselle autolle tarvittava muistitila käskyllä new. Tällä tavalla varattu muistitila pysyy käytössä kunnes sitä poistetaan käskyllä delete (tämä on tavallisin syy muistivuotoihin, eli varataan muistia mutta unohdetaan vapauttaa sitä kun sitä ei enää käytetään).

      Eli ensin varaat taulukon (tai vastaavan tietorakenteen) joka sisältää osoittimia (pointterieta) new komenolla luotuihin "autoihin". Ainoastaan taulukolle annat nimen, ei yksittäisille autoille, eli ei mitään a, b, c... vaan vitun_iso_autolista.

      Monesti tällainen rakenne voisi olla binary tree, johtuen sen ylivoimaisista haku ja lajitteluominaisuuksista, mutta sen nyt ei liity tähän.

      Pääasia on että ymmärrät että voit allokoida muistia lyhyellä tähtäimellä tai pitkällä tähtäimellä, mutta aina sinun on tehtävä se! ( muuten tulee virheilmoitus "undefined variable".

    • pertti

      Entäs sit jos haluaa numeroida jokaisen sisäänsyötetyn tiedon numerosta 1 alkaen ja ylöspäin?

      Eli:
      "Syötä tiedot autolle numero *numsa*: ______"
      ja
      "Auto numero *numsa* on Audi TT 1968 henkilöauto" sitten tulostaessa kans.

    • pertti

      nii elikkä mites saan tuon numerointihomman toimiin? eiks se jollain tapaa for-satsin avulla pitäs onnistua, for(i=0;i

    • pertti

      oon vissiin jo sokeeksikki tullu ku en muka sitä aikasemmin nähny että tuo edellisen kysymyksen vastaus jo on sielä. pahoittelut

    • perttien-pertti

      Tavallisesti tarvitset samasta luokasta monta määritelmää (tuskinpa teit tuon autoluokan sen takia että syötät ainoastaan yhden auton tiedot!)

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nasima löi Jussille luun kurkkuun

      Nasima kertoi ettei Jussi sovi puhemieheksi, koska sallii rasismin. Mihin toimiin perussuomalaiset ryhtyvät? Kuka nouse
      Maailman menoa
      460
      8232
    2. Razmyar on säälittävä - puhemiehellä ei ole mitään syytä ottaa kantaa tähän "silmäkohuun"

      jonka toimittajat sai aikaan. Asia ei kuulu puhemiehelle millään lailla. Razmyar haluaa taas vaan huomiota. Mutta jos r
      Maailman menoa
      116
      5667
    3. Pitkän linjan yritysjohtaja: Suomen tapahtumat eivät ole Aasian kärkiuutinen

      Viimeaikaista kohua on käytetty sisäpoliittisena lyömäaseena, Thomas Zilliacus sanoo. – Koska asiaa kuitenkin kommentoi
      Maailman menoa
      116
      4701
    4. Miten Eerolan silmäkuvat voivat levitä muutamassa tunnissa ympäri maailmaa?

      Seuraako koko maailma persujen ja erityisesti Eerolan somea reaaliajassa? Edes kansanedustajan itsemurha eduskuntatalos
      Maailman menoa
      210
      4574
    5. Siviilipalvelusmies Halla-aho normalisoi rasismin perussuomalaisissa

      SMP:n tuhkille perustettu puolue ei ollut ihmisiä vastaan, vaan instituutiokriittinen. "Missä EU - siellä ongelma", oli
      Perussuomalaiset
      35
      4509
    6. Suomalaisilta vaaditaan valtavasti suvaitsevaisuutta - miksi sitä ei vaadita muslimeilta

      Suomalaisilta vaaditaan kaikkea, pitää olla suvaitsevainen ja hyväksyä vieraiden tavat, rasisti ei saa olla jne. Miksi s
      Maailman menoa
      55
      4013
    7. Juuri Suomen valtamedian toimittajat teki "silmävääntelystä" sen kohun

      ja ilmeisesti ottivat yhteyttä myös ulkomaisiin medioihin, että katsokaas tätä. Mutta Japanin medioissa on asiaan suhta
      Maailman menoa
      160
      3890
    8. Demarit ovat oikeasti törppöjä eli heikkoälyisiä

      ja todistavat sitä päivittäin täällä lapsellisilla jutuillaan. Kauheasti on hehkuttaneet kuinka demarien kannatus vaan
      Maailman menoa
      79
      3772
    9. Perussuomalaiset eivät harrasta maalittamista kuten vasemmisto

      Huomaa tässä keinotekoisessa "rasismi"-kohussakin kuinka vasemmistolaiset maalittavat Perussuomalaisia. Me emme vastaava
      Maailman menoa
      44
      3700
    10. SDP:n kansanedustaja Marko Asell: Suomen myönnettävä maahanmuuton ongelmat

      Hänen mielestään Suomen pitää pyrkiä rajoittamaan jyrkästi turvapaikanhakijoiden pääsyä maahan ja hän arvioi, että maaha
      Maailman menoa
      87
      3528
    Aihe