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 imp ファイルは含めませんでしたが、ドライバーにはこれらが含まれています。

#include "changeDispenser.h"
#include "enhanced.h"
4

2 に答える 2

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);
于 2012-04-09T23:15:06.723 に答える
1

投稿したソース コードに、このクラスのグループを構成する 3 つのファイル (enhanced.h、enhanced.cpp (?)、changeDispencer.h) が正しく表示されている場合は、追加する必要があります。

#include "changeDispenser.h"

changeDispenser「enhanced.h」の先頭に追加して、コードの一部にenhanced(「enhanced.h」からの)の定義が含まれている場合に、 の定義が使用可能であることを常に確認します。クラスをサブクラス化するには、基本クラスの完全な定義が常に利用可能である必要があります。

于 2012-04-09T23:15:26.350 に答える