Natomiast tutaj, gdy parametrem jest obiekt klasy, która posiada własny konstruktor nie można (wydaje mi się) stworzyć obiektu bez użycia tego właśnie konstruktora.
Domyślam się, że próbowałeś zrobić coś takiego:
class Cos
{
Rzecz rzecz1;
Rzecz rzecz2;
Rzecz rzecz3;
public:
Cos()
{
rzecz1("as", "sd", 2);
rzecz2("we", "ew", 4);
rzecz3("re", "yh", 5);
}
Chodzi o to, że tak naprawdę konstruktor inicjalizuje obiekty jeszcze zanim wejdzie w kod w klamrach {}. W środku bloku {} operujesz na już zainicjalizowanych obiektach. W tym przypadku `Rzecz` nie ma konstruktora bez argumentów, więc `Rzecz rzecz1;` nie wie jak zainicjalizować obiekt - na tym polega błąd.
To jest podobne do takiej sytuacji: taki kod zadziała:
void f(){
Rzecz rzecz1("qx", "wx", 2);
}
Ale ten nie:
void f(){
Rzecz rzecz1; // <- tu jest problem, cokolwiek zrobisz nizej nie ma znaczenia
rzecz1 = Rzecz("qx", "wx", 2);
}
Rozwiązaniem jest, aby powiedzieć konstruktorowi, jak zainicjalizować `rzecz1`. Robi się to nie w bloku kodu konstruktora, lecz nad nim (w tzw liście inicjalizacyjnej):
class Cos
{
Rzecz rzecz1;
Rzecz rzecz2;
Rzecz rzecz3;
public:
Cos()
: rzecz1("as", "sd", 2)
, rzecz2("we", "ew", 4)
, rzecz3("re", "yh", 5)
{
}