2012-04-13 12 views
12

otrzymuję następujący błąd w C++:error C2614: 'ChildClass': nielegalne inicjalizacji członkiem: 'zm1' nie jest podstawą lub członek

error C2614: 'ChildClass': nielegalne inicjalizacji członkiem: " zm1' jest nie bazowa lub członek

Class Base 
{ 
    protected: 
    int var1; 
public: 
    Base() 
    { 
     var1=0; 
    } 
} 


class Child : public Base 
{ 
    int chld; 
    public: 
    Child() : var1(0) 
    { 
     chld=1; 
    } 
} 

czuję co mam zrobić to jak w protokole OO. Tutaj var1 jest członkiem danych klasy Base z chronionym jako specyfikator dostępu. Więc może zostać odziedziczony i stałby się prywatny w dziecku.

Nie rozumiem, dlaczego pojawia się błąd?

+2

Masz również kilka błędów w swoim kodzie: 'Class Base' powinno być' Class Base'. Po każdej klasie brakuje Ci średników. – Mysticial

+0

Dlaczego myślisz, że "stałoby się to prywatnym dzieckiem"? –

Odpowiedz

20

Nie działa z dokładnego powodu, dla którego wyświetlany jest komunikat o błędzie: można korzystać tylko z list inicjalizujących z bezpośrednimi elementami członkowskimi lub klasami podstawowymi.

W twoim przypadku, nie trzeba nawet zainicjować var1, ponieważ Base::Base() zostanie wywołana przez Child „s konstruktora, który będzie ustawiony var1 do 0.

Jeśli chcesz inną wartość, musisz przeciążać Base konstruktora i nazywają to wyraźnie:

class Base 
{ 
protected: 
    int var1; 
public: 
    Base() : var1(0) 
    { 
    } 
    Base(int x) : var1(x) 
    { 
    } 
}; 

class Child:public Base 
{ 
    int chld; 
public: 
    Child(): Base(42) , chld(1) 
    { 
    } 
}; 
+1

Przeciążenie 'Base (int x)' może wymagać 'protected '. – ildjarn

5

Nie można zainicjować członek klasy podstawowej, tylko z bieżącej klasy. Użyj sparametryzowanego konstruktora w klasie bazowej.

Class Base 
{ 
    protected: 
    int var1; 
    Base(int var) : var1(var) 
    {} 
    public: 
    Base() 
    { 
     var1=0; 
    } 
}; 

class Child:public Base 
{ 
     int chld; 
    public: 
     Child():Base(0) 
     { 
     chld=1; 
     } 
}; 
+0

dziękuję bardzo za :) – codeLover

Powiązane problemy