2012-03-13 17 views
5

benim hata çağrısına için eşleşen işlevi ... Yapıcıda hatası: İşte

"

'NumGame :: NumGame (& int)': hatası: Kategori' çağrısına için eşleşen fonksiyonu :: Kategori (''

Burada birkaç benzer soruyu inceledim, ancak bir cevap bulamıyorum. Bir temel sınıf kategorim var ve NumGame ondan miras alın ama derleme alışkanlık yok. hata

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

} 

cevap

9

Category bir varsayılan kurucu yok:

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

} 

VEYA

Sen Category sınıf için hiçbir argüman constrcutor sağlamak kendin gerek NumGame'un Category temel nesnesi:

sınıfınızda
+0

Ama ben sadece varsayılan kurucuyu sürmekte değil miyim? Ve eğer fazla sürmezsem, o zaman varsayılan kurucu kullanılır, bu yüzden varsayılan olarak argümanlarım var. BTW'nin her iki cevabı kodumun derlenmesine neden oldu, belli ki bazı şeyler bana açık değil :) – Aikiman001

15

Sebep:

türetilmiş sınıf NumGame bir bağımsız değişken yapıcı nesnesinin Category kısmını oluşturmak için adı Category temel sınıf bir örneğini oluşturmak. Sınıfınızın bir tane yok ve derleyici bu konuda şikayet ediyor.

Derleyici neden varsayılan kurucuyu sentezlemedi? Eğer sizin için herhangi bir argüman almaz yapıcı sentezlemek gelmez sınıfının derleyici herhangi yapıcısı sağladıktan sonra kodunuzu birini kullanıyorsa

, Sen kendin sağlamak zorunda.

Çözümleri:

hatayı önlemek için iki yol vardır:

Çağrı Catoegory subobject Member Initializer list aracılığıyla Base sınıfında uygun kullanılabilir yapıcı. Bu, kodunuzun no argüman kurucusunu kullandığı senaryoyu kaldırır. Eğer argümanları sağlamanız gerekmektedir böylece oluştururken,

Category::Category() 
{ 

} 
+0

Teşekkürler harika – Aikiman001

+0

Harika, bu sadece bunu düzeltmek için bana yardımcı oldu. : D – lama12345

0

sınıfı, temel sınıf kurucusuna bir çağrı vermeniz gerekir. t eğer sen, derleyici varsayılan contructor ile yap: senin durumunda Category() senin var ..