首页 > 解决方案 > 如何将子类的对象保留在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();
};

标签: c++inheritance

解决方案


要解决眼前的问题,您需要ClientShop.h. 但是,您在此处构建的类层次结构至少可以说令人困惑,例如,每个人都Client拥有一个Shop,将类层次结构更改为更明智的东西应该完全消除问题。


推荐阅读