Je suis nouveau en C++ et j'apprends actuellement l'héritage. Je ne sais pas comment hériter correctement ma classe abstraite MapItem
, je continue à recevoir ces erreurs ..
Comment puis-je hériter de ma classe abstraite?
extrait d'erreur
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()"
Il prétend aussi que ma classe Residential
est une classe abstraite. Le programme compile et s'exécute avec succès uniquement lorsque j'ajoute le mot clé const
à la fonction tick()
. Mais calme évidemment, c'est un problème car tick()
doit fonctionner sur certaines variables membres de la classe. J'ai correctement inclus tous les fichiers et mon fichier make cible tous les fichiers corrects, ce qui rend cette erreur hors de ma compréhension.
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;
}
Merci pour la réponse, il s'agit d'une affectation matérielle et l'assignation nécessite que MapItem :: tick() soit une pure fonction virtuelle qui, à mon avis, nécessite le "const = 0;" dans la définition de classe ... ce qui est quelque chose que je ne suis pas exactement sûr à propos de ALSO ... Residential :: tick() ne peut pas être une fonction constante, car il doit fonctionner sur certains membres de la classe. encore une fois im nouveau à C++ donc je ne sais pas quoi faire ici – infetsor
peut-être ma compréhension d'une fonction virtuelle pure est incorrecte. mais à partir de maintenant, il nécessite le const = 0; part – infetsor
@infetsor: "pure virtual" signifie simplement que c'est "virtual" et a le '= 0' ... il n'a pas besoin d'être' const'. Fondamentalement, le virtuel pur marque simplement la fonction comme ayant besoin d'être surchargée dans une classe dérivée avant qu'une instance de classe puisse être instanciée. Il n'y a aucune raison qui devrait avoir une relation à savoir si 'const' de la fonction, et ce n'est pas le cas. –