web-dev-qa-db-ja.com

「抽象型のオブジェクトを割り当てることができません」エラー

エラーはこちらです:

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();
}

私はそれがロングショットであることを知っています、ここでコード全体を書くことはできません…

28
Itzik984

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

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

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

純粋仮想関数は、宣言の最後に_= 0;_が付いたものです。

例:virtual void doSomething() = 0;

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

76
Alok Save

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

15
Daniel