Я новичок в 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;
}
Спасибо за ответ, это назначение HW, и для назначения требуется, чтобы MapItem :: tick() была чистой vritual функцией, которая, как мне кажется, требует «const = 0;». в определении класса ... что-то не совсем точно о ТАКЖЕ ... Residential :: tick() не может быть постоянной функцией, потому что она должна работать с некоторыми членами класса. снова im new для C++, поэтому я не уверен, что делать здесь – infetsor
Возможно, мое понимание чистой виртуальной функции неверно. но на данный момент это требует const = 0; part – infetsor
@infetsor: «pure virtual» просто означает, что он «виртуальный» и имеет '= 0' ... он не должен быть' const'. В принципе, чистый виртуальный объект просто отмечает функцию как подлежащую переопределению в производном классе до того, как экземпляр класса может быть инстанцирован. Нет причин, по которым должно быть какое-либо отношение к функции 'const', а это не так. –