c++ - 如何将子类的对象保留在cpp中的另一个类中?基类未定义错误
问题描述
我正在用 cpp 编写简单的商店程序。我有 3 个类:Shop、Client、Bucket。Shop 是 Bucket 的父类。商店有客户向量,每个客户都有自己的桶。我遇到了#include 的问题。我必须在 Shop.h 中包含 Client.h,以便 Shop 可以看到客户的向量,但出于类似原因,我似乎还必须在 Clinet.h 中包含 Bucket.h。这会产生一个问题: Bucket 被包含在 Shop 之前,所以我收到“Base Class Undefined”错误。我怎样才能使这项工作?
商店.h
#pragma once
#include <vector>
#include <string>
#include "functions.h"
#include "Client.h"
class Shop {
protected:
std::vector<int> quantities;
std::vector<std::string> products;
std::vector<float> prices;
private:
std::vector<Client*> clients;
int loggedClient;
public:
Shop();
~Shop();
int readProducts();
int loadClientsBase();
int checkLoginData(std::string log, std::string pass, int *logged);
int checkIfSameLogin(std::string log);
int addClient();
void login();
void logout();
int sell();
virtual void display();
void displayLoggedClient();
int saveHistory();
};
客户端.h
#pragma once
#include "Bucket.h"
class Client
{
private:
float money=0.0;
Bucket bucket;
std::string login;
std::string password;
std::string description;
public:
Client();
~Client();
void addLoginData(std::string log, std::string pass, std::string desc, float mon);
std::string getLogin() { return login; };
std::string getPassword() { return password; };
std::string getDescription() { return description; };
float getMoney() { return money; };
void addLogin(std::string log);
void addPassword(std::string pass);
void addDescription(std::string desc);
void addMoney(float m);
void addToBucket(std::string prod, int quant, float price);
void displayBucket();
Bucket getBucket() { return bucket; };
friend std::ostream& operator<<(std::ostream& os, Client& client);
};
桶.h
#pragma once
#include <vector>
#include <string>
#include "Shop.h"
class Bucket : public Shop
{
public:
Bucket();
~Bucket();
void addProduct(std::string name, int amount, float price);
void deleteProduct();
void display();
std::string getProduct(int i);
int getQuantity(int i);
float getPrice(int i);
int getNumberOfProducts() { return products.size(); };
void clearBucket();
};
解决方案
要解决眼前的问题,您需要Client
在Shop.h
. 但是,您在此处构建的类层次结构至少可以说令人困惑,例如,每个人都Client
拥有一个Shop
,将类层次结构更改为更明智的东西应该完全消除问题。
推荐阅读
- puppet - puppet 模块代码中 puppet hiera() 和 lookup() 的区别
- rxjs - RxJS - 连接并合并两个可观察对象
- function - Rust 中的函数原型是什么?
- c# - 正则表达式至少需要 6 位数字,但数字可以在任何地方
- javascript - 如何使用 JavaScript 中的 JSON 数组中的数据为 chartJS 图形创建自定义工具提示?
- javascript - Parsley.js 中关于 data-parsley-`constraint`-message 的说明
- javascript - 嵌套的 .unionWith,每个级别有一个唯一的合并
- java - Hibernate 需要很长时间才能得到查询结果
- php - 即使使用 catch,Php-fpm 仍然会记录我的错误
- python - 从图像上字符的坐标(横坐标和纵坐标)重建文本