繁体   English   中英

我可以在.hpp文件中包含#include吗?

[英]May I #include in .hpp files?

我有一个名为A的类,它具有其.cpp.hpp文件。 它取决于类BC 现在,我想知道是否应该在A.cppA.hpp #include B.hpp#include C.hpp A.hpp 我认为将#includeA.hpp文件中对我来说将是有益的,因为我正在创建B*的向量,并且我不确定如果仅当编译器知道B的正确大小时,向前声明它(所以我不能正确地增加指针)...“向前声明”是指编写class B; class C; A.hpp开始时。

如前所述,您通常可以通过使用前向声明来#include东西,而实际上,最佳实践是尽量减少包含的其他标头的数量。

但是:要回答您的问题标题:是的,可以,并且避免“循环包含”的常见机制如下

A.hpp:

#ifndef A_HPP_INCLUDED
#define A_HPP_INCLUDED

... // code

#endif

现在,如果说B.hpp包括A.hpp,那么C.hpp看起来像:

#ifndef C_HPP_INCLUDED
#define C_HPP_INCLUDED

#include "A.hpp"
#include "B.hpp"

...
#endif

这样,您将不会收到错误消息,说明例如已经定义了“ A类”。

如果它是B*的向量,则无需在另一个标头中包含B.hpp 向前声明很好。 指针大小相同,无论它们指向什么。

最好仅在必要时才包含,而看起来确实没有。

我不知道我是否了解您的班级层次结构,在我看来是这样的:

B.hpp

class B
{
    B();
};

B.cpp

B::B() {};

C.hpp

class C
{
    C();
};

A.cpp

A::A() {};

A.hpp

class A
{
    A();
    B *b;
    C *C;
};

A.cpp

#include "B.hpp"
#include "C.hpp"

A::A() :
    b(NULL), c(NULL)
{
};

这个对吗? (如果没有,请考虑提供一些代码;)如果您的class A具有指向class B class Cclass C class A指针,则向前声明必须是您唯一需要的东西。

我不确定如果只向前声明它,编译器是否知道B的正确大小

是的,只要您在A.cpp文件中包含B.hppC.hpp ,编译器就可以推断出它的大小(类大小,指针大小始终相同)。 为什么? 仅仅因为在cpp文件中,由于#include它知道正确的大小。 我发现这个答案对理解我的意思很有帮助。

hpp文件中可以吗? 也许,如果您的A.hpp不会包含在其他文件中,则class Bclass C不会打扰并传播到另一个文件中。 因此,如果是这种情况,则不必要。 但是恕我直言,最佳实践是在可能的情况下将声明和#include转发到cpp文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM