嵌套类的定义和通过文件启动

Nested classes definition and initiation through files

本文关键字:文件 启动 定义 嵌套      更新时间:2023-10-16

我正在尝试使类函数可以附加到其他类上,例如嵌套类。我对C++还很陌生,所以我可能实际上并没有尝试使用嵌套类,但据我所知,这就是我所处的位置。

现在,我刚刚用Chrome编写了这个,所以它没有真正的用处,但我想保持代码简短。

我正在使用Visual Studio 2015在Windows 7上进行编译。

我在 file_1.h 中有两个类:

#pragma once
#include "file_2.h"
class magic_beans{
public:
    magic_beans();
    ~magic_beans();
    int getTotal();
private:
    double total[2]; //they have magic fractions
}
class magic_box{
public:
    magic_box(); //initiate
    ~magic_box(); //make sure all objects have been executed
    void update();
    magic_beans beans; //works fine
    magic_apples apples; //does not work
private:
    int true_rand; //because it's magic
};

。我在 file_2.h 中有一个类:

#pragma once
#include "file_1.h"
class magic_apples{
public:
    magic_apples();
    ~magic_apples();
    int getTotal();
private:
    double total[2];
}

现在,我发现我可以简单地更改:

magic_apples apples;

自:

class magic_apples *apples;

在我的构造函数中,我添加:

apples = new magic_apples;

在我的析构函数中,在您问之前:

delete apples;

为什么我必须使用指针引用外部文件中定义的类,而本地定义的类就可以了?

理想情况下,我希望能够以与定义magic_beans相同的方式定义magic_apples。我不反对使用指针,但为了保持我的代码相当统一,我有兴趣找到一种替代的定义方法。

我在 file_1.h 的magic_box课中尝试了一些magic_apples的替代定义,但我无法获得其他任何工作。

你有一个循环依赖,file_1.h取决于file_2.h取决于file_1.h等。 再多的标题包括防护或编译指示都无法解决这个问题。

有两种

方法可以解决问题,一种方法是使用前向声明指针。指针可以解决它,因为使用指针不需要完整的类型。

解决它的另一种方法是打破循环依赖。通过查看您展示的结构,似乎magic_apples不需要magic_beans类型,因此您可以通过简单地不包含file_1.h来打破圆圈。所以file_2.h应该看起来像

#pragma once
// Note no include file here!
class magic_apples{
public:
    magic_apples();
    ~magic_apples();
    int getTotal();
private:
    double total[2];
}