2010-09-15 34 views
6

Ahora tengo una clase A que hereda de la clase B, y B no tiene un constructor predeterminado. Estoy tratando el crear un constructor para A que tiene los mismos parámetros exactos para el constructor B 's, pero me sale:Clase heredada de la clase sin el constructor predeterminado

error: no matching function for call to ‘B::B()’ 
note: candidates are: B::B(int) 

¿Cómo puedo solucionar este error?

+0

Por favor, publique su código actual –

+0

@Ramon Zarazua - ¿por qué? Ya recibí la respuesta ... – wrongusername

Respuesta

14

El constructor debe tener este aspecto:

A(int i) : B(i) {} 

El bit después de los medios de colon "inicializar la base B sub clase de objeto de este objeto utilizando su int constructor, con el valor de i".

Supongo que no proporcionó un inicializador para B, y por lo tanto, de forma predeterminada, el compilador intenta inicializarlo con el constructor no-args inexistente.

+0

¡Gracias por explicarme lo que eso significa, Steve! No me di cuenta de que había un inicializador – wrongusername

2

Necesita invocar el constructor base a través de la lista de inicializadores de su clase.

Ejemplo:

class C : public B 
{ 
public: 
    C(int x) : B(x) 
    { 
    } 

}; 

Cuando no inicializa B explícitamente que tratará de utilizar el constructor por defecto que no tiene parámetros.

Cuestiones relacionadas