33

エラーはここにあります:

vector<Graduate *> graduates;
graduates.push_back(new AliceUniversity(identifier,id,salary,average));

祖父母クラス:

Graduate::Graduate(char identifier,
                   long id,
                   int salary,
                   double average)
    : _identifier(identifier),
      _id(id),_salary(salary),
      _average(average)
{
}

親クラス:

UniversityGraduate::UniversityGraduate(char identifier,
                                       long id,
                                       int salary,
                                       double average)
    : Graduate(identifier,id,salary,average)
{
}

実際/子クラス:

AliceUniversity::AliceUniversity(char identifier,
                                 long id,
                                 int salary,
                                 double average)
    : UniversityGraduate(identifier,id,salary,average)
{
    _graduateNum++;
    _sumOfGrades += average;
    _avrA = getAverage();
}

ここにコード全体を書くことはできません…</p>

4

2 に答える 2

83

C++ では、少なくとも 1 つの純粋仮想関数を持つクラスを抽象クラスと呼びます。そのクラスのオブジェクトを作成することはできませんが、そのクラスへのポインターまたは参照のみを持つことができます。

抽象クラスから派生している場合は、クラスのすべての純粋仮想関数をオーバーライドして定義してください。

あなたのスニペットからあなたのクラスAliceUniversityは抽象クラスのようです。Graduateクラスおよびのすべての純粋仮想関数をオーバーライドして定義する必要がありますUniversityGraduate

純粋仮想関数は、= 0;宣言の最後にあるものです。

例:virtual void doSomething() = 0;

特定の回答については、エラーが発生したクラスの定義と、そのクラスの派生元のクラスを投稿する必要があります。

于 2011-09-08T18:25:38.180 に答える
17

親クラスの 1 つで宣言され、子クラスのいずれにも実装されていない仮想関数が必要です。すべての仮想関数が継承チェーンのどこかに実装されていることを確認してください。クラスの定義に実装されていない純粋仮想関数が含まれている場合、そのクラスのインスタンスを構築することはできません。

于 2011-09-08T18:25:49.413 に答える