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) { }
};
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) { }
};
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ę.
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.
To jest tylko przykład i jestem ciekaw dlaczego nie działa.
Dzięki wielkie za odpowiedź, o to chodziło :)
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.