Forum » Programiranje » [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:
Razred kraj ima lastnosti string ime in int oznaka. Imam privzeti konstruktor in konstruktor ki prejme string za ime in int za oznako.
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/
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.
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.
Evo zaj sem probal v mainu nardit polje petih krajev pa javi isto.
http://www.alfakan.si/
http://mihajerot.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):
Potem lahko mirne duše uporabljate
Podobno se zgodi tudi v main-u, le da imate tam na možnost narediti
Ali pa seveda napišete privzeti konstruktor v razredu Kraj.
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/
http://mihajerot.si/
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Milijonske kraje bitcoinovOddelek: Novice / Kriptovalute | 22929 (19536) | micka15 |
» | AvtoŠola (Vaje)Oddelek: Šola | 11614 (9900) | bluefish |
» | Cmd ne prepozna komandOddelek: Operacijski sistemi | 1057 (886) | matto87 |
» | Kako gre to v Dev C++ ???Oddelek: Programiranje | 2343 (1814) | bi0s |
⊘ | defekt - c++Oddelek: Programiranje | 1130 (1048) | Vesoljc |