我试图创建类函数,我可以使用其他类,比如嵌套类。我对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的替代定义,但是我无法使用其他任何东西。
答案 0 :(得分:3)
您有循环依赖关系,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];
}