如何#include inside .cpp 文件?

How to #include inside .cpp file?

在下面的例子中,FileA头包含在FileB头中; FileB.h 中的某些 classes 在 FileA.h;

中预先声明

在FileA.h

//Forward Declaration.
class classB;

//Main classes.
class ClassA
{
//...
private:
void MemberFunction(ClassB* PtrToClassBObj);
}

在FileB.h

//Includes.
#include FileA.h

//Main classes.
class ClassB
{
//...
public:
int MemberVariable = 0;
}

然后在FileA.cpp

#include FileA.h

//Member functions definitions.
void ClassA::MemberFunction(ClassB* PtrToClassBObj)
{
if(PtrToClassBObj)
PtrToClassBObj->MemberVariable++;
}

这足以使 FileA.cpp 能够访问来自 FileB.h 的所述 class 的 public 成员吗?还是 FileA.cpp 本身应该包括 FileB.h?是否需要前向声明(假设在 FileA.h 中不使用 class 名称,并且仅在 FileA.cpp 中使用)?一般的最佳实践建议是什么?

Is that enough to make FileA.cpp capable of accessing public members of said classes from FileB.h?

不,这还不够 - ClassB 的完整定义需要可见。

or should FileA.cpp itself include FileB.h?

它应该,因为它在 PtrToClassBObj->MemberVariable 处使用了 class。

was the forward declaration needed

如前所述,不 - 您可以从 FileB 中删除 #include FileA.h 并使 FileA 包含 FileB.

(assuming no use of the class name inside FileA.h, and only used inside FileA.cpp exclusively)?

假设FileA.h里面没有用到ClassB,前向声明ClassB也没有用,所以不需要前向声明。该假设与提供的代码冲突,因为符号 ClassBClassA::MemberFunction 声明中使用。

What is the general best practice advice if any?

遵循代码指南。不要写意大利面条式的代码,也不要有循环依赖。更喜欢层次结构树中结构清晰、易于理解、可读的代码。在启用所有警告的情况下进行编译,使用代码检查器和消毒剂。经常锻炼。吃得健康。