» »

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

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;
}

noraguta ::

ja dej jih za javne pa bo
Pust' ot pobyedy k pobyedye vyedyot!

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?

fish555 ::

Kako pa potem izgleda privzeti konstruktor za Kraj? Naj bi ga vedno zapisali v nalogah.

joze67 ::

Oba sta lahko prazna:
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…



Vredno ogleda ...

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

c++ rabim pomoč konstuktorji

Oddelek: Programiranje
6987 (682) Snowflake2
»

c++ napaka

Oddelek: Programiranje
101643 (968) lebdim
»

C# NMEA podatki iz GPS-ja

Oddelek: Programiranje
10880 (681) krneki0001
»

c++ two dimensional array v classu

Oddelek: Programiranje
111273 (1076) Senitel
»

algoritem za pretvorbo koordinat

Oddelek: Programiranje
153261 (3088) Monster

Več podobnih tem