2012-04-13 21 views
12

Sto ottenendo il seguente errore in C++:errore C2614: 'ChildClass': illegale membro di inizializzazione: 'var1' non è una base o membro

errore C2614: 'ChildClass': inizializzazione di membri illegale: ' var1' è non è una base o membro

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


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

mi sento quello che ho fatto è come da protocollo OO. Qui var1 è un membro di dati di classe di base con protetti come l'identificatore di accesso. Quindi può essere ereditato e diventerebbe privato nel bambino.

Non capisco perché mi appare l'errore?

+2

Hai anche un sacco di errori nel codice: 'Base di classe' dovrebbe essere' classe Base'. Ti manca il punto e virgola dopo ogni lezione. – Mysticial

+0

Perché pensi che "sarebbe diventato privato nel bambino"? –

risposta

20

Non funziona per il motivo esatto che il messaggio di errore fornisce: è possibile utilizzare solo elenchi di inizializzatori con membri diretti o classi di base.

Nel tuo caso, non hanno nemmeno bisogno di inizializzare var1, dal momento che Base::Base() saranno chiamati da Child 's costruttore, che imposterà var1-0.

Se si desidera un valore diverso, dovrete sovraccaricare Base costruttore e chiamare in modo esplicito:

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

The Base (int x) '' sovraccarico può avere bisogno di essere 'protected'. – ildjarn

5

Non è possibile inizializzare un membro di una classe di base, solo della classe corrente. Utilizzare un costruttore con parametri nella classe base.

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

grazie mille :) – codeLover

Problemi correlati