2012-03-13 16 views
5

Aquí está mi error ...error: ninguna función coincidente para la llamada a

"en el constructor 'NumGame :: NumGame (int &)': error: ninguna función coincidente para la llamada a 'Categoría :: Categoría () '"

Ive miró algunas preguntas similares aquí pero parece que no puede encontrar una respuesta. Tengo una Categoría de clase base y NumGame se hereda pero no se compila.

class Category { 

public: 
    void virtual selection(int&); 
    Category(int&); 
    virtual ~Category(){}; 
private: 
    int myRandNum; 
}; 

Category::Category(int& a){ 
    myRandNum = a; 
} 

void Category::selection(int& a){ 
    cout << "I am NumGame version number... " << a << endl; 
    cout << "Now Im playing... " << myRandNum << endl; 
} 

class NumGame : public Category { 

public: 
    void selection(int&); 
    NumGame(int&); 
    ~NumGame(){}; 
private: 
    int myRandNum; 
}; 

NumGame::NumGame(int& b){ 
    myRandNum = b; 
} 

void NumGame::selection(int& b) { 

} 

Respuesta

9

Category no tiene un constructor por defecto, por lo que necesita para suministrar argumentos al construir el objeto base Category de NumGame:

NumGame::NumGame(int& b) : 
    Category(b) 
{ 
    myRandNum = b; 
} 
+0

Pero, ¿no acabo de montar el constructor predeterminado de todos modos? Y si no lo hago, entonces se usará el constructor predeterminado, por lo que tengo argumentos en el predeterminado. Por cierto, ambas respuestas han causado que mi código se compile, obviamente algunas cosas no están claras para mí :) – Aikiman001

15

motivo del error:

Cuando se crea una instancia de la clase derivada de la clase Base NumGameCategory ningún constructor argumento es llamado para crear la parte Category del objeto. Tu clase no tiene uno y el compilador se queja de ello.

¿Por qué el compilador no sintetizó el constructor predeterminado?

vez que proporciona cualquier constructor de la clase el compilador no sintetiza el constructor que no toma ningún argumento para usted, usted tiene que establecer que usted mismo si su código utiliza uno.

Soluciones:

Hay dos formas de evitar el error:

llamar al constructor disposición apropiada en Clase base Catoegory subobjeto través Member Initializer list. Esto elimina el escenario donde su código usa un constructor sin argumentos.

NumGame::NumGame(int& b) : Category(b) 
{ 

} 

O

Es necesario proporcionar una constrcutor ningún argumento para Category clase ti mismo:

Category::Category() 
{ 

} 
+0

Gracias genial – Aikiman001

+0

Genial, la única respuesta en SO que me ayudó a solucionar esto. : D – lama12345

0

en su clase NumGame debe llamar al constructor de la clase base. si no lo hace, el compilador lo hace por usted con el contructor predeterminado: en su caso Category() que no tiene ...

Cuestiones relacionadas