Forum » Programiranje » C++ - no appropriate default constructor available
C++ - no appropriate default constructor available
fish555 ::
Izdelal sem nek razred(Kot), ki ima 3 spremenljivke ter neke metode. Nato sem pa naredil še en razred(Kraj), katerega spremenljivke so tipa Kot.
Prevajalnik mi javi napako pri definiciji kostruktorja: no appropriate default constructor available
v čem je problem?
Prevajalnik mi javi napako pri definiciji kostruktorja: no appropriate default constructor available
class Kot { private: int stopinje; int minute; int sekunde; public: Kot(int dd,int mm, int ss) { stopinje=dd; minute=mm; sekunde=ss; } }; class Kraj { private: Kot zemljepisnaDolzina; Kot zemljepisnaSirina; public: Kraj(Kot a, Kot b) { zemljepisnaDolzina=a; zemljepisnaSirina=b; } };
v čem je problem?
mchaber ::
Mislim, da manjkata privzeta konstruktorja Kot() in Kraj(). Pa priporočljive so še metode set in get za vsako razredno spremenljivko.
.
fish555 ::
Aha, sem napravil privzeti kostruktor razreda Kot takole, vendar mi prevajalnik izpiše, da ni mogoče dosegati spremenljivk razreda Kot, ker so privatne. Kako pa naj pol sploh pridem do stopinj, minut, sekund, če ne v konstruktorju?
Kot() { stopinje=0; minute=0; sekunde=0; } Kraj() { ime=""; zemljepisnaDolzina.minute=0; zemljepisnaDolzina.sekunde=0; zemljepisnaDolzina.stopinje=0; zemljepisnaSirina.stopinje=0; zemljepisnaSirina.minute=0; zemljepisnaSirina.sekunde=0; }
joze67 ::
Ko si določil konstruktor za Kot, si prevajalniku preprečil, da bi naredil default konstruktor (brez parametrov). Potem pa deklaracija v Kraj ne pride skozi, ker ne inisializiraš spremenljivk zempjepisnaDolzina, zemlljepisnaSirina in hoče za to uporabiti default konstruktor.
Torej, bodisi deklariraj Kot() {} ali pa inicializiraj spremenljivki.
---- PS Ravnokar si
do minute, sekunde... prideš samo znotraj razreda Kot, ne pa tudi znotraj razreda Kraj - konstruktor ali ne. K sreči Kraj() (še) ne potrebuješ. Sicer pa boš v Kraj inicializiral samo zempjepisnaDolzina in zemlljepisnaSirina, ne pa njunih posameznih članov - za to naj bi poskrbeli sami; kje je sicer smisel objektnega programiranja?
Torej, bodisi deklariraj Kot() {} ali pa inicializiraj spremenljivki.
---- PS Ravnokar si
do minute, sekunde... prideš samo znotraj razreda Kot, ne pa tudi znotraj razreda Kraj - konstruktor ali ne. K sreči Kraj() (še) ne potrebuješ. Sicer pa boš v Kraj inicializiral samo zempjepisnaDolzina in zemlljepisnaSirina, ne pa njunih posameznih članov - za to naj bi poskrbeli sami; kje je sicer smisel objektnega programiranja?
joze67 ::
Oba sta lahko prazna:
Kraj bo poklical privzete konstruktorje za Kot.
Ali pa eksplicitno, ampak ne nujno pravilno:
Tukaj boš uporabil še (implicitni) copy constructor. Ne nujno pravilno pa, ker si postavil vrednosti na 0, kar pa "poslovno" morda ni opravičljivo (se pa zgodi anyway).
Kot(){} Kraj(){}
Kraj bo poklical privzete konstruktorje za Kot.
Ali pa eksplicitno, ampak ne nujno pravilno:
Kraj() { zempljepisnaSirina=zemljepisnaDolzina=Kot(0,0,0); }
Tukaj boš uporabil še (implicitni) copy constructor. Ne nujno pravilno pa, ker si postavil vrednosti na 0, kar pa "poslovno" morda ni opravičljivo (se pa zgodi anyway).
boogie_xlr ::
Kot() : stopinje(0), minute(0), sekunde(0) {} //privzeti konstruktor
Podobno še za Kraj.
Kraj() : zemljepisnaDolzina(0,0,0), zemljepisnaSirina(0,0,0) {} //privzeti konstruktor
Upam da se ne motim.
Zgodovina sprememb…
- spremenil: boogie_xlr ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c++ rabim pomoč konstuktorjiOddelek: Programiranje | 1096 (791) | Snowflake2 |
» | c++ napakaOddelek: Programiranje | 1711 (1036) | lebdim |
» | C# NMEA podatki iz GPS-jaOddelek: Programiranje | 964 (765) | krneki0001 |
» | c++ two dimensional array v classuOddelek: Programiranje | 1397 (1200) | Senitel |
» | algoritem za pretvorbo koordinatOddelek: Programiranje | 3346 (3173) | Monster |