我已經benn有一段時間的問題,當我試圖從純虛類繼承,當我做「兒子」類的構造函數我收到此錯誤:父類的字段不被識別
../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類繼承,並且我在它們中都得到相同的錯誤。 [編輯]這隻發生在他們的構造函數。 課程中沒有構造函數,因此它是純虛擬的。
另一方面,我也有兩個類:Student和CSStudent:Student,其中Student也是純虛擬的,CSStudent繼承Student,在這種情況下沒有錯誤。我在他們倆都做了同樣的事情。 什麼似乎是問題? 我很抱歉我的語法錯誤。
[編輯] 添加Course.cpp部分,我得到錯誤。
謝謝!
後真正相關碼。並更正拼寫 – SomeWittyUsername
「課程中沒有任何構造函數,因此它是純虛擬的。」爲什麼純虛擬類不應該有構造函數?純粹的虛擬只意味着你必須從類中依次派生,然後才能從中創建對象 - 但是,這些對象的「基礎」部分仍然需要構造,並且可能需要構造器。 – JohnB
順便說一下,在C++中,每個類都有一個構造函數。如果你不明確聲明一個,編譯器會添加一個默認的構造函數。你唯一能做的就是通過聲明一個構造函數protected或private來限制從外部世界訪問構造函數。所以你的「純虛擬」類有一個構造函數(默認生成的),甚至是一個公共的! – JohnB