2012-03-13 17 views
5

Heres il mio errore ...errore: nessuna funzione di corrispondenza per la chiamata al

"In costruttore 'NumGame :: NumGame (int &)': errore: nessuna funzione di corrispondenza per la chiamata di 'Categoria :: Categoria () '"

Ive ha guardato un paio di domande simili qui, ma non posso sembrano trovare una risposta. Ho una classe di base Category e NumGame è ereditata da esso ma non verrà compilata.

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) { 

} 

risposta

9

Category non ha un costruttore di default, quindi è necessario fornire argomenti durante la costruzione l'oggetto Category base NumGame:

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

Ma non sono comunque sopra la guida del costruttore predefinito? E se non lo uso più, verrà usato il costruttore predefinito, che è il motivo per cui ho argomenti in quello predefinito. BTW entrambe le risposte hanno causato la compilazione del mio codice, ovviamente alcune cose non mi sono chiare :) – Aikiman001

15

Motivo per l'errore:

Quando si crea un'istanza della classe derivata NumGame classe Base Category nessun costruttore argomento è chiamato a creare la parte Category dell'oggetto. La tua classe non ne ha uno e il compilatore si lamenta di ciò.

Perché il compilatore non ha sintetizzare il costruttore di default?

Dopo aver fornito qualsiasi costruttore per la classe il compilatore non sintetizzare il costruttore che non prende alcun argomento per voi, è necessario fornire che voi stessi se il codice utilizza uno.

Solutions:

Ci sono due modi per evitare l'errore:

chiamata la disposizione costruttore appropriato in classe Base Catoegory sotto-oggetto attraverso Member Initializer list. Ciò rimuove lo scenario in cui il codice utilizza un costruttore senza argomenti.

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

} 

O

È necessario fornire un constrcutor alcun argomento per Category classe te:

Category::Category() 
{ 

} 
+0

Grazie fantastico – Aikiman001

+0

Ottimo, l'unica risposta su SO che mi ha aiutato a risolvere questo problema. : D – lama12345

0

nella classe NumGame è necessario fornire una chiamata al costruttore della classe base. se non lo fai, compilalo per te con il contructor di default: nel tuo caso Category() che non hai ..

Problemi correlati