Wytłumaczenie błędu kompilacji w klasie dziedzicznącej

0

Witam. Może mi ktoś wytłumaczyć dlaczego w takim wypadku pojawia się błąd w kompilacji?

class X {
public:
	int x;
	X(int x) {}
};

class Y : public X {
	X x;
	Y* y;
	Y(int x) : X(x) { }
}; 
0

A po co ci te pole typu klasy bazowej w klasie Y? Jest to powiedzenie sobie "jestem X i mam X". Wybierz albo dziedziczenie albo kompozycję.

1
class X {
public:
        int x;
        X(int x) {}
};
 
class Y : public X {
        X x;
        Y* y;
        Y(int x) : X(x), x(x) { }
}; 

brakowało inicjacji x, bo X nie ma konstruktora domyślnego.

0

To jest tylko przykład i jestem ciekaw dlaczego nie działa.

0

Dzięki wielkie za odpowiedź, o to chodziło :)

1

Pomocny bywa kompilator, który wypisuje sensowne komunikaty :-)

c:\pp\MYPROGS\4p>clang++ a.cpp
a.cpp:10:9: error: constructor for 'Y' must explicitly initialize the member 'x' which does not have a default
      constructor
        Y(int x) : X(x) { }
        ^
a.cpp:8:11: note: member is declared here
        X x;
          ^
a.cpp:1:7: note: 'X' declared here
class X {
      ^
1 error generated.

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