2012-03-13 1 views
5

내 오류 호출 일치 기능 ... 생성자에서 오류 : Heres는

"

'NumGame :: NumGame (&를 INT)' 오류 : 장르 '에 대한 호출에 대한 일치하는 기능 :: 분류 () ' "

필자는 비슷한 질문을 몇 개 보았지만 답을 찾지 못하는 것 같습니다. Category 클래스와 NumGame이 상속되지만 컴파일되지 않습니다. 오류에 대한

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

} 

답변

9

Category는 기본 생성자를 가지고 있지 않습니다

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

} 

또는

당신은 Category 클래스의 인수가없는 constrcutor를 제공하기 위해 자신의 필요 Category 기본 개체는 NumGame :

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

하지만 어쨌든 기본 생성자를 그냥 타지 않았습니까? 그리고 그것을 타고 넘어 가면 대신 기본 생성자가 사용되어 기본 매개 변수에 인수가있는 이유가됩니다. BTW 두 답변을 내 코드를 컴파일하는 데 발생했습니다, 분명히 몇 가지 내게 명확하지 않습니다 :) – Aikiman001

15

이유 :

당신이 파생 클래스 NumGame 인수를 생성자는 객체의 Category 파트를 생성하기 위해 호출되지 Category 기본 클래스의 인스턴스를 생성. 클래스에 컴파일러가 없으므로 컴파일러가 그것에 대해 불평합니다.

왜 컴파일러가 기본 생성자를 합성하지 않았습니까? 당신은 당신을 위해 어떤 인수를하지 않는 생성자를 합성하지 않는 클래스 컴파일러에 대한 생성자를 제공하면 코드 하나를 사용하는 경우

는, 당신은 자신의 것을 제공해야합니다.

솔루션 :

오류를 방지하는 방법은 두 가지가 있습니다

전화 Catoegory 하위 객체 Member Initializer list을 통해 기본 클래스의 적절한 사용 가능한 생성자. 그러면 코드 인수 생성자가없는 시나리오가 제거됩니다. 당신이 인수를 제공 할 수 있도록 구성 할 때,

Category::Category() 
{ 

} 
+0

고마워요. – Aikiman001

+0

정말 고마워요. : D – lama12345

0

NumGame 클래스에서는 기본 클래스의 생성자에 대한 호출을 제공해야합니다. 만약 당신이하지 않는다면, 컴파일러가 기본 컨스트럭터로 당신을 위해 해줄 것입니다. 귀하의 경우에 Category()을 가지고 계시지 마십시오 ..

관련 문제