如何#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
也没有用,所以不需要前向声明。该假设与提供的代码冲突,因为符号 ClassB
在 ClassA::MemberFunction
声明中使用。
What is the general best practice advice if any?
遵循代码指南。不要写意大利面条式的代码,也不要有循环依赖。更喜欢层次结构树中结构清晰、易于理解、可读的代码。在启用所有警告的情况下进行编译,使用代码检查器和消毒剂。经常锻炼。吃得健康。
在下面的例子中,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
也没有用,所以不需要前向声明。该假设与提供的代码冲突,因为符号 ClassB
在 ClassA::MemberFunction
声明中使用。
What is the general best practice advice if any?
遵循代码指南。不要写意大利面条式的代码,也不要有循环依赖。更喜欢层次结构树中结构清晰、易于理解、可读的代码。在启用所有警告的情况下进行编译,使用代码检查器和消毒剂。经常锻炼。吃得健康。