Obiekt w obiekcie – błąd kompilacji

0

Czesc.

Zaczalem sie uczyc obiektowego cpp, i mam problem. Po krotkim przeczytaniu mojego kodu bedzie wiadomo o co mi chodzi, ale w skrocie powiem ze chcialbym zeby obiekt Burger mial w sobie inne obiekty. Czy konieczne jest tutaj uzywanie dziedziczenia klas?

Kompilator wywala:

[ERROR] No matching function for call to 'Bulki::Bulki()'; 
[ERROR] No matching function for call to 'Mieso::Mieso()';

etc.

#include <iostream>
#include <conio.h>
#include <string>

using namespace std;
class Bulki
{
	public:
		Bulki(int idBulki, string nazwaBulki, double cenaBulki);
		int idBulki;
		string nazwaBulki;
		double cenaBulki;
};

class Sery
{
	public:
		Sery(int idSera, string nazwaSera, double cenaSera);
		int idSera;
		string nazwaSera;
		double cenaSera;
};

class Mieso
{
	public: 
		Mieso(int idMiesa, string nazwaMiesa, double cenaMiesa);
		int idMiesa;
		string nazwaMiesa;
		double cenaMiesa;
};

class Sosy
{
	public: 		
		Sosy(int idSosu, string nazwaSosu, double cenaSosu);
		int idSosu;
		string nazwaSosu;
		double cenaSosu;
}; 
class Burger
{
	public:
		Burger(Bulki bulka, Mieso mieso, Sery ser, Sosy sos);
		Bulki bulka; 
		Mieso mieso; 
		Sery ser;
		Sosy sos;
};


Bulki::Bulki(int idBulki, string nazwaBulki, double cenaBulki)
{
	this->idBulki = idBulki;
	this->nazwaBulki = nazwaBulki;
	this->cenaBulki = cenaBulki;
}

Sery::Sery(int idSera, string nazwaSera, double cenaSera)
{
	this->idSera = idSera;
	this->nazwaSera = nazwaSera;
	this->cenaSera = cenaSera;
}

Mieso::Mieso(int idMiesa, string nazwaMiesa, double cenaMiesa)
{
	this->idMiesa = idMiesa;
	this->nazwaMiesa = nazwaMiesa;
	this->cenaMiesa = cenaMiesa;
}
Sosy::Sosy(int idSosu, string nazwaSosu, double cenaSosu)
{
	this->idSosu = idSosu;
	this->nazwaSosu = nazwaSosu;
	this->cenaSosu = cenaSosu;
}
Burger::Burger(Bulki bulka, Mieso mieso, Sery ser, Sosy sos)
{
	this->bulka = bulka;
	this->mieso = mieso;
	this->ser = ser;
	this->sos = sos;
}
const int sizeOfBulki=3;
const int sizeOfMieso=5;
const int sizeOfSer = 4;
const int sizeOfSosy = 3;

int main(int argc, char** argv) {
	//BULKI
	Bulki * bulka[sizeOfBulki];
	bulka[0] = new Bulki(1,"Pszenna", 1.2);
	bulka[1] = new Bulki(2,"Grahamka", 1.5);
	bulka[2] = new Bulki(3,"Slonecznikowa", 1.7);
	
	//MIESO
	Mieso * mieso[sizeOfMieso];
	mieso[0] = new Mieso(1,"Wolowe",5);
	mieso[1] = new Mieso(2,"Double wolowe", 6.5);
	mieso[2] = new Mieso(3,"Drobiowe", 4);
	mieso[3] = new Mieso(4,"Double Drobiowe", 5.5);
	mieso[4] = new Mieso(5,"Mieszane",8.30);
	
	//SERY
	Sery * ser[sizeOfSery];
	ser[0] = new Sery(1,"Cheedar",2);
	ser[1] = new Sery(2,"Gouda",1.5);
	ser[2] = new Sery(3,"Plesniowy",1.7)
	ser[3] = new Sery(4,"Feta",1.1);
	
	//SOSY
	Sosy * sos[sizeOfSosy];
	sos[0] = new Sosy(1,"Czosnkowy",1.2);
	sos[1] = new Sosy(2,"Pomidorowy",1.2);
	sos[2] = new Sosy(3,"Majonez",1.2);
	return 0;
}	
1

Nie potrzeba dziedziczenia.
Kompilator informuje Cię, że odwołujesz się do domyślnych konstruktorów, a nie są zdefiniowane.
Trzeba je dopisać.

Zastosuj się do http://en.cppreference.com/w/cpp/language/rule_of_three
oraz https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/.

1

Mało, że nie jest konieczne tu dziedziczenie, to jest całkiem nie na miejscu...
https://pl.wikipedia.org/wiki/Zasada_podstawienia_Liskov

0
YooSy napisał(a):

Nie potrzeba dziedziczenia.
Kompilator informuje Cię, że odwołujesz się do domyślnych konstruktorów, a nie są zdefiniowane.
Trzeba je dopisać.

Zastosuj się do http://en.cppreference.com/w/cpp/language/rule_of_three
oraz https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/.

Jak to nie sa zdefiniowane? Wydawalo mi sie, ze

Sery::Sery(int idSera, string nazwaSera, double cenaSera)
{
	this->idSera = idSera;
	this->nazwaSera = nazwaSera;
	this->cenaSera = cenaSera;
}

itp. to moje zdefiniowane konstruktory. Jezeli nie, to czym jest ten kawalek kodu?

0

To jest konstruktor z parametrami, a domyślny (default ctor) to konstruktor bez parametrów. Nawias okrągły pusty.

class Foo
{
//...
    Foo(); // domyślny
    Foo(args); // z argumentami
 //...
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1