2012-04-09 232 views
0

當我繼承的基類,它告訴我有沒有這樣的類有麻煩繼承基類

這是enhanced.h:

class enhanced: public changeDispenser // <--------where error is occuring 
    { 
    public: 
     void changeStatus(); 
     // Function: Lets the user know how much of each coin is in the machine 
     enhanced(int); 
     // Constructor 
     // Sets the Dollar amount to what the User wants 
     void changeLoad(int); 
     // Function: Loads what change the user requests into the Coin Machine 
     int dispenseChange(int); 
     // Function: Takes the users amount of cents requests and dispenses it to the user 

    private: 
     int dollar; 
    }; 

這是enhanced.cpp:

#include "enhanced.h" 
#include <iostream> 
using namespace std; 
enhanced::enhanced(int dol) 
{ 
    dollar = dol; 
} 

void enhanced::changeStatus() 
{ 
    cout << dollar << " dollars, "; 
    changeDispenser::changeStatus(); 
} 

void enhanced::changeLoad(int d) 
{ 
    dollar = dollar + d; 
    //changeDispenser::changeLoad; 
} 

這是changeDispenser.h:

class changeDispenser 
{ 
public: 
    void changeStatus(); 
    // Function: Lets the user know how much of each coin is in the machine 
    changeDispenser(int, int, int, int); 
    // Constructor 
    // Sets the Quarters, Dimes, Nickels, and Pennies to what the User wants 
    void changeLoad(int, int, int, int); 
    // Function: Loads what change the user requests into the Coin Machine 
    int dispenseChange(int); 
    // Function: Takes the users amount of cents requests and dispenses it to the user 
private: 
    int quarter; 
    int dime; 
    int nickel; 
    int penny; 
}; 

我不包括驅動程序文件或changeDispenser小鬼文件,但在驅動程序,這些都包含

#include "changeDispenser.h" 
#include "enhanced.h" 
+0

在聲明'enhanced'之前你在'enhanced.h'裏面加入了'changeDispenser.h'嗎? – 2012-04-09 23:14:10

+0

這固定的錯誤,但它在changeDispenser.h 錯誤錯誤C2011引發了另一個錯誤:「changeDispenser」:「類」類型重新定義 – Nick 2012-04-09 23:19:45

+0

你需要包括人員 - http://en.wikipedia.org/ wiki/Include_guard – 2012-04-09 23:27:30

回答

1

首先,你需要把在單獨的頭文件中的類changeDispenser的頭,並將其納入派生類頭。

changeDispenser沒有默認的非參數構造函數,所以您需要在派生類中顯式初始化它。一些東西:

enhanced::enhanced(int dol) : changeDispenser(0, 0, 0, 0) 
{ 
    dollar = dol; 
} 

或者你可以定義構造函數參數的默認值,這是不太可取的文體原因。

changeDispenser(int i=0, int j=0, int k=0, int l=0); 
+1

是的,這也是一個問題 - 沒有注意到。 – modelnine 2012-04-09 23:16:52

+0

我增加了#include「changeDispenser.h」到我的enhanced.h頭文件的頂部,並且我在enhanced.cpp文件中添加了增強::增強(int dol):changeDispenser(0,0,0,0)但現在它說'changeDispenser':'class'類型重定義 此外,changeDispenser.h中的構造函數由用戶在驅動程序文件中定義並傳遞。 – Nick 2012-04-09 23:26:40

+1

好的,那麼你需要頭衛兵。 http://en.wikipedia.org/wiki/Include_guard – 2012-04-09 23:35:06

1

如果你正確地張貼的源代碼顯示了三個文件(enhanced.h,enhanced.cpp(?),changeDispencer.h)製作了這組類,那麼你應該增加

#include "changeDispenser.h" 

置於「enhanced.h」的頂部,以便在代碼的某些部分包含enhanced(來自「enhanced.h」)的定義時始終確保changeDispenser的定義可用。要爲類繼承,基類的完整定義必須始終可用。