无效的抽象类型
Invalid abstract type
所以我的摘要有问题 class!
这是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
这是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;
}
这是 ShortTermProduct.h
#ifndef SHORTTERMPRODUCT_H
#define SHORTTERMPRODUCT_H
#include "Product.h"
class ShortTermProduct : public Product
{
public:
ShortTermProduct();
void Print();
bool isExpiring();
};
#endif
这是 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
最后是 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
我得到的错误是:
- [错误] 'products'
的抽象类型 'Product' 无效
- [错误] 无法将字段 'Fridge::products' 声明为抽象类型 'Product'
任何帮助将不胜感激!提前致谢!
virtual bool isExpiring()=0;
是一个纯虚函数(抽象),因此 Product
是一个抽象 class.
Product products[10];
您在这里所做的是尝试创建 10 个抽象类型的对象 Product
。但是您不能从抽象 class 创建对象。你想要的是 Product
指针,它可以指向派生的指针 classes:
Product** products = new Product*[10];
错误发生是因为Product
class有一个纯虚方法,所以你应该使用指针来声明它。如果你想使用 c++ 固定数组大小,我建议你看一下 std::array
here
std::array<Product*, 50> products;
所以我的摘要有问题 class!
这是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
这是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;
}
这是 ShortTermProduct.h
#ifndef SHORTTERMPRODUCT_H
#define SHORTTERMPRODUCT_H
#include "Product.h"
class ShortTermProduct : public Product
{
public:
ShortTermProduct();
void Print();
bool isExpiring();
};
#endif
这是 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
最后是 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
我得到的错误是:
- [错误] 'products' 的抽象类型 'Product' 无效
- [错误] 无法将字段 'Fridge::products' 声明为抽象类型 'Product'
任何帮助将不胜感激!提前致谢!
virtual bool isExpiring()=0;
是一个纯虚函数(抽象),因此 Product
是一个抽象 class.
Product products[10];
您在这里所做的是尝试创建 10 个抽象类型的对象 Product
。但是您不能从抽象 class 创建对象。你想要的是 Product
指针,它可以指向派生的指针 classes:
Product** products = new Product*[10];
错误发生是因为Product
class有一个纯虚方法,所以你应该使用指针来声明它。如果你想使用 c++ 固定数组大小,我建议你看一下 std::array
here
std::array<Product*, 50> products;