C++ 避免上课不见面?C++;

C++ 避免上课不见面?C++;,c++,header,linker,C++,Header,Linker,我刚开始把地狱和一个建立项目联系起来。我在头文件中移动了一些东西,现在遇到了这样一个事实:尽管我在每个头文件上使用了#indef、#define和#endif,但有些对象看不到其他对象 我注意到在我的一个旧文件中,我在一个名为World的类中使用了一个名为Region的类 因为阶级世界一直在抱怨看不到另一个阶级,我可以通过简单地包括阶级区域来克服它;在它上面 有没有办法避免这样的事情 谢谢。我避免包含/依赖性问题的一种方法是尽可能少地声明类/结构定义(不过,感谢Aldo指出这一点,仅限指针/引用

我刚开始把地狱和一个建立项目联系起来。我在头文件中移动了一些东西,现在遇到了这样一个事实:尽管我在每个头文件上使用了#indef、#define和#endif,但有些对象看不到其他对象

我注意到在我的一个旧文件中,我在一个名为World的类中使用了一个名为Region的类

因为阶级世界一直在抱怨看不到另一个阶级,我可以通过简单地包括阶级区域来克服它;在它上面

有没有办法避免这样的事情


谢谢。

我避免包含/依赖性问题的一种方法是尽可能少地声明类/结构定义(不过,感谢Aldo指出这一点,仅限指针/引用)。假设你有这门课:

class foo
{
    bar* barObject;
};
显然,bar需要在之前的某个点上定义。我们不需要包含bar的头文件,只需在foo的定义之前添加以下行即可

class bar;
这可以防止编译器抱怨没有定义bar,但也不需要包含整个标头。(称为远期申报)

我发现这可以最大限度地减少在存在循环依赖和诸如此类的情况下可能出现的许多烦人的问题

这对您的情况可能有帮助,也可能没有帮助,因为使用您提供的信息很难诊断您的特定问题,但它可以提供一个起点

更多阅读:

我们需要查看代码和错误消息。对于这样一个模糊的描述,有很多事情可能是问题的根源。我们可能无法帮助您解决这样一个一般性的问题。你的意思是你包含了标题(
#include“Region.h”
)还是你声明了类(
class Region;
)?你(模糊地)描述的问题听起来更像是编译错误,而不是链接器错误(特别是如果通过添加#include指令解决了这些问题)。另外,我希望您的意思是“#ifdef”而不是“#indef”。您所有的.cpp都编译为.o文件吗?在您使用的示例中,前向声明(顾名思义)实际上不起作用。如果类foo包含一个指向一个bar的指针或引用,它就可以工作,但如果它包含一个bar by value,它就不能工作——在这种情况下,编译器需要完整的bar声明。