저는 잠시 동안 문제가 생겼습니다. 순수 가상 클래스에서 상속하려고 할 때 "아들"클래스의 생성자를 만들 때이 오류가 나타납니다 :부모 클래스 필드가 인식되지 않습니다.
../src/Course.cpp:54:77: error: class ‘ElectiveCourse’ does not have any field named ‘_dptr’
그리고 이것은 모든 코스 보호 필드에 대해 발생합니다. 나는 ElectiveCourse처럼
ElectiveCourse::ElectiveCourse(
string name,
int semester,
double minGrade
)
: _dptr("CS"), _name(name), _semester(semester), _minGrade(minGrade) {
}
: 다음
class Course{
public:
virtual void reg(Student * s) = 0;
..
protected:
...
string _dptr;
...
};
과 :
Course.h :
class ElectiveCourse : public Course{
...
}
Course.cpp
이
은 구조 두 가지 다른 클래스가있다. Course 클래스에서 상속 받으면 모든 클래스에서 같은 오류가 발생합니다. [편집] 이것은 생성자에서만 발생합니다. Course 클래스에는 생성자가 없으므로 순수 가상입니다.다른 한편으로는 학생과 CSStudent : Student라는 두 개의 classe도 있습니다. 여기서 Student는 순수 가상이고 CSStudent는 Student를 상속하며이 경우에는 오류가 없습니다. 나는 그들 모두에서 똑같은 일을했다. 무엇이 문제입니까? 문법 오류로 유감입니다.
[편집] 오류가 발생하는 Course.cpp 부분을 추가했습니다.
감사합니다.
후 실제 관련을 : 그것은 당신이, 당신이 당신의 매개 변수 (이름, 학기 등)을 모두 수용하여 기본 클래스의 생성자를 만들고 하위 클래스 생성자에서이 생성자를 호출 할 필요 달성했다 암호. 맞춤법을 수정하십시오 – SomeWittyUsername
"Course 클래스에는 생성자가 없으므로 순수 가상입니다." 왜 순수 가상 클래스에는 생성자가 없어야합니까? 순수 가상은 객체를 생성하기 전에 먼저 클래스에서 파생되어야한다는 것을 의미합니다. 그러나 이러한 객체의 "기본"부분은 여전히 생성되어야하며,이를 위해 생성자가 필요할 수도 있습니다. – JohnB
Btw, C++에서 모든 클래스에는 생성자가 있습니다. 명시 적으로 선언하지 않으면 컴파일러에서 기본 생성자를 추가합니다. 당신이 할 수있는 유일한 일은 생성자를 protected 나 private으로 선언함으로써 외부 세계의 생성자에 대한 접근을 제한하는 것입니다. 그래서 당신의 "순수 가상"클래스는 생성자 (디폴트 생성)와 공개 된 생성자를 가지고 있습니다! – JohnB