» »

[C++]Agregacija in polje

[C++]Agregacija in polje

Keki ::

Lep pozdrav. Imam problem in sicer. Nardil sem razred Kraj in razred Kraji, ki vsebuje polje petih Krajev. V konstrukturju v razredu Kraji krajem iz polja petih krajev nastavljam vrednosti vender se program ne prevede, javi mi namreč tole:
C:\Dev-Cpp\prog2\5.1.1\Kraji.h In constructor `Kraji::Kraji()':
16 C:\Dev-Cpp\prog2\5.1.1\Kraji.h no matching function for call to `Kraj::Kraj()'
note C:\Dev-Cpp\prog2\5.1.1\Kraj.h:7 candidates are: Kraj::Kraj(const Kraj&)
note C:\Dev-Cpp\prog2\5.1.1\Kraj.h:7 Kraj::Kraj(std::string, int)

Konstruktor sem probal premaknit na vsa živa mesta, probal sem z dinamičnim alociranjem. Nič.

Koda:

class Kraji {
      private:
              int polje[5][5];
              Kraj krajis[5];
              
      public:
             Kraji() { 
                     
                     for(int i=0;i<5;i++)
                     {
                             
                             krajis[i] = Kraj("MB", i);
                             
                     }
                             
                     srand(time(0));
                     for(int i=0;i<5;i++)
                     {
                             for(int j=0;j<5;j++)
                             {
                                     polje[i][j] = ( rand() % 400);
                             }
                             
                     }
                     
                     }



Razred kraj ima lastnosti string ime in int oznaka. Imam privzeti konstruktor in konstruktor ki prejme string za ime in int za oznako.
http://www.alfakan.si/
http://mihajerot.si/

Tutankhamun ::

Ja, zanimivo... :)
V razredu Kraj maš definiran kopirni konstruktor? Mogoče hoče še to.

Men se drgač čist lepo prevede to kar si napisu, mam pa VS 2005.
AMD Phenom QUAD 9950 Black Edition, 8GB

Keki ::

Nimam kopirnega v razredu Kraj. Pa si si napisal razred Kraj al si zakomentiral polje kraji[5] ?

Evo zaj sem probal v mainu nardit polje petih krajev pa javi isto.
http://www.alfakan.si/
http://mihajerot.si/

Zgodovina sprememb…

  • spremenilo: Keki ()

arjan_t ::

Ko incializiraš polje tipa Kraj (Kraj krajis[5];), se že takrat izvede konstruktor za vsak kraj v polju, in ker konstruktorja brez argumentov nimaš definiranega javi napako

redo ::

Sicer ne obvladam, ampak lahko skušam odgovoriti.
Problem je, ker v razredu Kraj nimate default konstruktorja, se pravi takšnega Kraj::Kraj(). Compiler skuša poskrbeti, da ko se začne konstruktor Kraji::Kraji(), da so vsa polja v polju krajis[5] inicializirana. Se pravi, hoče poskrbeti, da lahko vi mirne duše uporabljate krajis[2].NekaFunkcija() znotraj Kraji::Kraji(). To mora storiti z default konstruktorjem za razred Kraj.

Edina preprosta rešitev, ki se je jaz spomnim je zamenjava arraya z vector-jem (oziroma kašnim drugim kontejnerjem iz STL):

#include <vector>

class Kraji {
  private:
std::vector<Kraj> krajis;
  public:
    Kraji() {
      for(int i=0; i<5; i++)
        krajis.push_back(Kraj("MB",i));
...
};


Potem lahko mirne duše uporabljate
krajis[i].NekaFunkcija()


Podobno se zgodi tudi v main-u, le da imate tam na možnost narediti

Kraj a[3]={Kraj("MB",0), Kraj("MB",1), Kraj("MB",2)};


Ali pa seveda napišete privzeti konstruktor v razredu Kraj.

Keki ::

Hja...prokleti dev-cpp. Jaz sem mel definiran Default konstruktor sam ga je nekaj spigalo in ga ni vido. Ko sem resetiral dev-cpp in za vsak primer na novo napisal konstruktor je začelo delat. Tnx
http://www.alfakan.si/
http://mihajerot.si/


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Milijonske kraje bitcoinov

Oddelek: Novice / Kriptovalute
4522929 (19536) micka15
»

AvtoŠola (Vaje)

Oddelek: Šola
2811614 (9900) bluefish
»

Cmd ne prepozna komand

Oddelek: Operacijski sistemi
61057 (886) matto87
»

Kako gre to v Dev C++ ???

Oddelek: Programiranje
142343 (1814) bi0s

defekt - c++

Oddelek: Programiranje
51130 (1048) Vesoljc

Več podobnih tem