2009-10-15 4 views
-2
class base 
{ 
    base() { } 
    virtual ~base() { } 
} 

class middleBase 
{ 
    middleBase() { } 
    middleBase (int param) { } 
    ~middleBase() { } 
} 

class concrete : public middleBase 
{ 
    concrete() { } 
    concrete (int param) { // process } 
    ~concrete() { // delete something } 
} 

오류는 다음과 같습니다 undefinded 참조에 "middleBase :: middleBase (INT의 PARAM)" C++ 추상 클래스 생성 및 소멸

이 매개 변수가있는 생성자를위한 최선의 방법에 적합? 클래스 정의 이후에 세미콜론이 필요 ++

+1

컴파일해서는 안됩니다. –

+2

문제가 재현 될 수있는 실제 코드를 게시하십시오. 누락 된 코드와 관련된 여러 문제가 있습니다. 클래스의 경우 middleBase는 base에서 파생되지 않으며 middleBase 소멸자는 가상이 아니며 액세스 지정자가 누락됩니다. – Naveen

답변

8
class base 
{ 
    public: // constructor should be accessible by derived class 
    base() { } 
    virtual ~base() { } 
}; // add semicolon 

class middleBase : public base // you missed the declaration 
{ 
    public: 
    middleBase() { } 
    middleBase (int param) { } 
    virtual ~middleBase() { } 
}; 

class concrete : public middleBase 
{ 
    public: 
    concrete() { } 
    concrete (int param) : middleBase(param) { /* process */ } 
    virtual ~concrete() { /* delete something */ } 
}; 
0

당신이 클래스의 멤버 함수 또는 변수 전에 액세스 지정을 (/ 공용/개인 보호) 넣어하지 않는 경우, 기본값은 private 지정을위한 것입니다 C++ 클래스. 따라서 middleBase의 생성자는 private이며 concrete 클래스의 생성자에서 액세스 할 수 없으므로 언급 한 오류가 발생합니다.