我是新來的C++和當前學習繼承。我不知道如何正確地繼承我的抽象類MapItem
,我不斷收到這些錯誤..
我該如何繼承我的抽象類?
錯誤片斷
hidden overloaded virtual function 'MapItem::tick' declared here:
different qualifiers (const vs none)
virtual void tick() const = 0;
Undefined symbols for architecture x86_64:
"Residential::Residential()"
它還聲稱我Residential
類是一個抽象類。 當我將const
關鍵字添加到tick()
函數時,程序只能成功編譯並運行。但很明顯,這是一個問題,因爲tick()
需要對某些類成員變量進行操作。 我正確地包含了所有的文件,而我的make文件則是針對所有正確的文件,這使得我的理解中出現了這個錯誤。
map_item.h
// abstract class
class MapItem {
...
virtual void tick() const = 0;
}
residential.h
#ifndef RESIDENTIAL_H
#define RESIDENTIAL_H
#include "map_item.h"
class Residential : public MapItem {
private:
int capacity;
double taxRevenue;
public:
Residential();
virtual ~Residential();
void tick();
double collectTaxes();
};
#endif
residential.cpp
#include "residential.h"
Residential::Residential() {
capacity = 1;
taxRevenue = 0.0;
}
Residential::~Residential() {}
void Residential::tick() {
}
double Residential::collectTaxes() {
taxRevenue = 0.0;
return taxRevenue;
}
感謝您的回覆,這是一個硬件分配和賦值要求MapItem :: tick()是一個純粹的vritual函數,這對我的理解需要「const = 0;」在類定義中......這也是我不太確定的東西...... Residential :: tick()不能是一個常量函數,因爲它需要對某些類成員進行操作。再次即時通訊新的C + +所以我不知道該怎麼辦 – infetsor
也許我對純虛函數的理解是不正確的。但截至目前它需要const = 0;部分 – infetsor
@infetsor:「純虛擬」意味着它是'虛擬'並且具有'= 0'...它不需要是'const'。基本上,純虛擬標記函數需要在派生類中重寫,然後才能實例化類實例。沒有理由應該與函數的'const'有任何關係,而不是。 –