2009-10-15 88 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

這不應該編譯。 – 2009-10-15 08:54:45

+2

請發表問題可以重現的真實代碼。這個代碼有多個問題就像失蹤;對於類,middleBase不是從base派生的,middleBase析構函數不是虛擬的,缺少訪問說明符等。 – Naveen 2009-10-15 08:56:20

回答

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 */ } 
}; 
3

C類定義之後++需要分號:

class { … }; 
0

如果沒有前級的成員函數和變量放在訪問限定符(公共/私營/保護),默認是private說明符C++類。所以middleBase的構造函數是私有的,不能通過concrete類的構造函數訪問,導致你提到的錯誤。