Błąd: konstruktor klasy bazowej musi jawnie zainicjować konstruktor klasy nadrzędnej
Jestem nowy w C ++. Kiedy próbuję skompilować poniższy kod, pojawia się ten błąd
constructor for 'child' must explicitly initialize theoto moja klasa
base class 'parent' which does not have a default constructor
child::child(int a) {
<pre class="lang-cpp prettyprint-override">
#include<iostream>
using namespace std;class Parent
{
public :
int x;
Parent(int a);
int getX();
};
Parent::Parent(int a)
{
x = a;
}
int Parent::getX()
{
return x;
}
class Child : public Parent
{
public:
Child(int a);
};
Child::Child(int a)
{
x = a;
}
int main(int n , char *argv[])
{}
Dlaczego otrzymuję ten błąd?
Jak mogę rozwiązać ten problem?
Z góry dziękuję
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
A zatem:
Anonimowy użytkownik
Potwierdzenie od:
Aby rozwiązać ten problem, będziesz musiał albo podać domyślny konstruktor dla klasy bazowej, albo po prostu wywołać jego konstruktor na liście inicjalizacyjnej konstruktora klasy pochodnej:
Anonimowy użytkownik
Potwierdzenie od:
Kompilator doda automatyczne wywołanie do domyślnego konstruktora nadrzędnego (bez argumentów). Jeśli rodzic nie ma domyślnego konstruktora, musisz jawnie wywołać jeden z konstruktorów, który sam wykonuje.
Kompilator musi to zastosować, aby upewnić się, że funkcjonalność odziedziczona przez klasę podrzędną po klasie nadrzędnej jest poprawnie skonfigurowana ... na przykład inicjalizacja wszelkich zmiennych prywatnych, które dziecko odziedziczyło po rodzicu, ale nie można uzyskać do nich bezpośredniego dostępu. Nawet jeśli Twoja klasa nie ma tego problemu, nadal powinieneś przestrzegać zasad.
Oto kilka przykładów konstruktorów w klasach, które używają dziedziczenia:
To jest w porządku, ParentA ma domyślnego konstruktora:
To nie jest normalne; ParentB nie ma domyślnego konstruktora, więc klasa ChildB1 musi jawnie wywołać jeden z samych konstruktorów:
To jest w porządku, jawnie nazywamy konstruktora ParentB:
W porządku, ParentC ma domyślnego konstruktora, który zostanie wywołany automatycznie:
Anonimowy użytkownik
Potwierdzenie od:
ręce
https://stackoverflow.com/users/1450890/rook, musimy przestrzegać tych zasad. Więcej szczegółów można uzyskać z dobrego wyjaśnienia
listy inicjalizacyjne
http://www.cprogramming.com/tu ... Alexa Alleina
https://plus.google.com/113987 ... or... Dlatego listy inicjalizacyjne powinny być wymagane, gdy nie ma określonego konstruktora dafault, a także do inicjowania stałych składowych. Podsumowuje-
Przed uruchomieniem treści konstruktora wszystkie konstruktory dla
klasę nadrzędną, a następnie jej pola. Domyślna
wywoływane są konstruktory bez argumentów. Listy inicjalizacyjne pozwalają
wybierz, który konstruktor jest wywoływany i jakie argumenty
pobiera tego konstruktora.
Anonimowy użytkownik
Potwierdzenie od: