Problem z wydrukiem na ekran


(Ziomek Zemsty) #1

Witam!

Piszę pewien program i mam problem. Otóż przy próbie kompilacji pojawia się błąd: 

Error    1    error C3867: 'produkt::retcena': function call missing argument list; use '&produkt::retcena' to create a pointer to member

gdzie interesujące części programu wyglądają tak:

/*produkt.h*/

class produkt
{
private:
	double cena;
public:
	produkt();
	virtual ~produkt();
	void setcena(int c);
	double retcena();

/*produkt.cpp*/

produkt::produkt()
{
}

produkt::~produkt()
{
}

void produkt::setcena(int c)
{
	podatek = 0.22*c;
	marza = 0.1*c;
	cena = c + podatek + marza;
}

double produkt::retcena()
{
	return cena;
}

/*main.cpp*/
    
    ksiazka k1 = ksiazka();

	k1.setcena(30);

	cout << k1.retcena << endl;

Jak rozwiązać ten problem?


(Fizyda) #2
void produkt::setcena(int c)
{
	podatek = 0.22*c;
	marza = 0.1*c;
	this->cena = c + podatek + marza;
}

double produkt::retcena()
{
	return this->cena;
}

 


(Ziomek Zemsty) #3

Niestety, dalej to samo…


(Edgarus) #4

A może:

cout << k1.retcena() << endl;

Nawiasów brakuje, a to funkcja, a nie pole klasy.


(Ziomek Zemsty) #5

działa <3 dzięki wielkie. Poszło z tymi nawiasami, aczkolwiek dodałem jeszcze & i ogólnie wygląda to tak:

 

---produkt.h---
double &retcena();

---produkt.cpp---
double &produkt::retcena()
{
	return this->cena;
}

Szczerze mówiąc nie rozumiem do końca, co to zmienia, ale skoro kompilator tak podpowiadał… 


(Fizyda) #6

To zmienia bardzo wiele bo teraz zwracasz referencje do własności cena i możesz ją modyfikować poza klasą.


(Rolek0) #7

Polecam:

Dodatkowo:

 


(Ziomek Zemsty) #8

A jeszcze takie jedno inne pytanie. Potrzebuję utworzyć tablicę obiektów. Mam klasy: nadrzędną A i podrzędne B, C, które dziedziczą z A. Próbuję zrobić to w taki sposób:

B **tablica;
tablica=new B *[10];

po czym wpisuję:

tablica[0]=b1;

gdzie b1 to obiekt klasy B

ale pokazuje komunikat: "no suitable conversion from B to A exists. 

Jakiego typu powinna być tablica aby pogodzić wszystkie klasy? Dodam, że w klasach obiekty też są różnego typu.


(Fizyda) #9

Klasy nadrzędnej. Przeczytaj te linki co ci podesłał Rolek0, poczytaj o wskaźnikach i naucz się programowania obiektowego.