純粋な仮想クラスから継承しようとしているときに、「息子」クラスのコンストラクターを作成すると、次のエラーが表示されます。
../src/Course.cpp:54:77: error: class ‘ElectiveCourse’ does not have any field named ‘_dptr’
これはすべてのコース保護フィールドで発生します。
これは構造です:
Course.h:
class Course{
public:
virtual void reg(Student * s) = 0;
..
protected:
...
string _dptr;
...
};
その後:
class ElectiveCourse : public Course{
...
}
Course.cpp:
ElectiveCourse::ElectiveCourse(
string name,
int semester,
double minGrade
)
: _dptr("CS"), _name(name), _semester(semester), _minGrade(minGrade) {
}
ElectiveCourse と同様に、Course クラスから継承する他の 2 つのクラスがあり、それらすべてで同じエラーが発生します。[編集] これは、それらのコンストラクターでのみ発生します。Course クラスにはコンストラクターがないため、純粋な仮想です。
一方、Student と CSStudent : Student の 2 つのクラスもあります。ここで、Student も純粋な仮想であり、CSStudent は Student を継承します。この場合、エラーは発生しません。私はそれらの両方でまったく同じことをしました。問題に見えるのは?文法エラーで申し訳ありません。
[編集] エラーが発生している Course.cpp 部分を追加しました。
ありがとう!