So habe ich ein Problem mit einer abstrakten Klasse!Ungültiger abstrakter Typ
Dies ist der Product.h
#ifndef PRODUCT_H
#define PRODUCT_H
#include <string>
using namespace std;
class Product
{
private:
string description;
int d,m,y;
float weight;
public:
Product();
Product(string description,int d,int m,int y, float weight);
void print();
virtual bool isExpiring()=0;
};
#endif
Dies ist Product.cpp
#include "Product.h"
#include <string>
#include <iostream>
using namespace std;
Product::Product()
{
description="";
d=0;
m=0;
y=0;
weight=0.0;
}
Product::Product(string description,int d,int m,int y, float weight)
{
this->description=description;
this->d=d;
this->m=m;
this->y=y;
this->weight=weight;
}
void Product::print()
{
cout << "Description: " << description<<endl;
cout << "Expiration date: " << d <<"/" << m << "/" << y << endl;
cout << "Weight: " << weight << endl;
}
Dies ist ShortTermProduct.h
#ifndef SHORTTERMPRODUCT_H
#define SHORTTERMPRODUCT_H
#include "Product.h"
class ShortTermProduct : public Product
{
public:
ShortTermProduct();
void Print();
bool isExpiring();
};
#endif
Dies ist LongTermProduct.h
#ifndef LONGTERMPRODUCT_H
#define LONGTERMPRODUCT_H
#include "ShortTermProduct.h"
#include <string>
using namespace std;
class LongTermProduct
{
private:
int lifetime;
string open, open_date;
public:
LongTermProduct(int lifetime,string open,string open_date);
void print();
bool isExpiring();
};
#endif
Und schließlich ist dies Fridge.h
#ifndef FRIDGE_H
#define FRIDGE_H
#include "LongTermProduct.h"
class Fridge : public LongTermProduct
{
private:
Product products[10];
public:
fridge();
void addShortTermProduct (ShortTermProduct p);
void addLongTermProduct (LongTermProduct p);
void printFridgeProducts();
bool isExpiring();
};
#endif
Die Fehler Ich erhalte sind diese:
- [Fehler] ungültig abstrakten Typ 'Produkt' für 'Produkte'
- [Fehler] kann Feld 'Kühlschrank :: Produkte' nicht vom abstrakten Typ 'Produkt' sein
Jede Hilfe wäre Rost! Vielen Dank im Voraus!
Mögliche Duplikat suchen [Warum können wir nicht eine Instanz einer abstrakten Klasse erstellen?] (https://stackoverflow.com/questions/5131567/why-cant-we-create-eine-instance-of-abstract-class) –
Welcher Teil von "kann das Feld nicht deklarieren" Fridge :: products "ist vom abstrakten Typ" Product "" du hast nicht verstehen? 'Product' ist eine abstrakte Klasse und Sie versuchen, ein Klassenmitglied zu deklarieren, das ein Array von abstrakten Klassen ist. Dies ist nicht gültig C++. Das Ende. –
Beachten Sie auch, dass es generell ratsam ist, auch den Destruktor der abstrakten Basisklasse 'virtual' zu deklarieren. – bipll