2012-04-13 14 views
12

estoy recibiendo el siguiente error en C++:error C2614: 'ChildClass': miembro ilegal de inicialización: 'var1' no es una base o miembro de

error C2614: 'ChildClass': miembro de inicialización ilegal: ' var1' es no una base o miembro de

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


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

me siento lo que he hecho es según el protocolo orientado a objetos. Aquí var1 es un miembro de datos de la clase Base con el especificador de acceso protegido. Entonces puede ser heredado y se volvería privado en el niño.

No entiendo por qué me sale el error?

+2

También tiene un montón de errores en su código: 'Class Base' debe ser' class Base'. Te faltan puntos y comas después de cada clase. – Mysticial

+0

¿Por qué crees que "se convertiría en privado en un niño"? –

Respuesta

20

No funciona por la razón exacta por la que el mensaje de error le proporciona: solo puede usar listas de inicializadores con miembros directos o clases base.

En su caso, usted ni siquiera necesita para inicializar var1, ya Base::Base() serán llamados por Child 's constructor, que establecerá var1 a 0.

Si desea un valor diferente, usted tiene que sobrecargar Base constructor y llamar explícitamente:

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

La sobrecarga 'Base (int x)' puede necesitar ser 'protected'. – ildjarn

5

No se puede inicializar un miembro de una clase base, solamente de la clase actual. Use un constructor parametrizado en la clase 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

muchas gracias :) – codeLover

Cuestiones relacionadas