在其他类中使用多个类 我正在完成一个C++任务,我遇到了一个问题,把所有的类连接在一起。这些类有基本的构造函数、getter、setter等。所以我确信我得到的大量编译器错误是由于我错误地混合和匹配了所有类造成的

在其他类中使用多个类 我正在完成一个C++任务,我遇到了一个问题,把所有的类连接在一起。这些类有基本的构造函数、getter、setter等。所以我确信我得到的大量编译器错误是由于我错误地混合和匹配了所有类造成的,c++,object,inheritance,multiple-inheritance,C++,Object,Inheritance,Multiple Inheritance,我的类被分为cpp和h文件,基本上每次该类需要另一个类的内容时,我都会使用include语句。哪个类需要的基本图表如下所示: 基本上,我想弄清楚的是,在CustomerOrder和Retailer中都包含“Product.h”是不是把事情搞砸了,还是我做得不对 任何帮助都会很好! 谢谢 编辑: 下面是每个类基本上正在做的一个实例。Customer类包含CustomerOrder数组,CustomerOrder包含产品数组等 ... class Customer { private: s

我的类被分为cpp和h文件,基本上每次该类需要另一个类的内容时,我都会使用include语句。哪个类需要的基本图表如下所示:

基本上,我想弄清楚的是,在CustomerOrder和Retailer中都包含“Product.h”是不是把事情搞砸了,还是我做得不对

任何帮助都会很好! 谢谢

编辑:

下面是每个类基本上正在做的一个实例。Customer类包含CustomerOrder数组,CustomerOrder包含产品数组等

...
class Customer
{
private:
    string customerName;
    string customerID;
    float balance;
    static const int ORDERSIZE = 2;
    CustomerOrder* orderList[ORDERSIZE];
    Retailer retailer;
...
和客户订单:

...
class CustomerOrder
{
private:
    static const int SHOPSIZE = 20;
    Product* shoppingList[SHOPSIZE];
...

首先,您的图表令人困惑。在OOP中,您使用的箭头表示公共继承,但这里似乎不是这样(也不应该是这样)

你的问题不能笼统地回答。如果需要完整的类型,您可以包含另一个类。否则,转发声明就可以了。这只会影响编译速度。尽管如此,规则是如果可以使用转发声明,如果必须,则使用
#include
s

以下是一些情况,您可以通过远期申报逃脱处罚:

1.)指针:

class AnotherClass; // <-- forward declaration
class Example
{
    // ...
    AnotherClass *another_class;
};
警告2:不要试图向前声明标准类。只需执行
#include
#include
等操作,让编译器了解如何优化编译时间


编辑:实际上,如果您忘记包含一个不能向前声明的向前声明类,链接器(而不是编译器)会提醒您,但这只是一个吹毛求疵的问题:)

您能发布少量代码来表示您在项目中如何设置类吗?你不必发布所有内容,我们只需要看看你是如何“混合搭配”它们的。另外,您使用的是标题保护吗?我们也需要生成错误,或者至少需要对错误进行良好的描述。在CustomerOrder和Retailer中都包含“Product.h”不会把事情搞砸。如果是这样的话,请确保您没有忘记包含警卫。当然!我将在几秒钟内发布一个关于我如何使用代码的小片段@user3224853:您应该使用标准容器,而不是数组!例如,std::vector。STD::向量被认为是C++中的默认集合机制,而不是数组。这将帮助您摆脱与数组相关的所有严重问题,因为数组太多,无法在一条注释中全部列出……!:)啊!这是真正的信息,谢谢!事实上,我发现当我做头部防护时,我把它们都贴上了PRODUCT_H标签,这可能会导致很多问题。。。我正在编辑一个关于我如何使用主要帖子中的类的示例,我将与您所说的内容交叉引用。谢谢
class AnotherClass; // <-- forward declaration
class Example
{
    // ...
    void f(AnotherClass &another_class);
};
class AnotherClass; // <-- forward declaration
class Example
{
    // ...
    AnotherClass Get();
};
class Example; // forward declaration
std::vector<Example> v; // undefined behaviour!