2012-04-09 140 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的定义可用。要为类继承,基类的完整定义必须始终可用。