我有一组要实现的类,我计划按以下方式执行:
(1)一个主头文件(entity.h),它将这些类的所有前向声明都包含在一个名称空间中,即:。
namespace SomeNameSpace {
class A;
...
class E;
}
(2)每个类都有单独的头文件(即A.h,B.h),它们定义了类并声明了所有组成变量和方法。
(3)最后,定义所有成员和静态的.cpp(即A.cpp,B.cpp)。
现在,我尝试通过#include "entity.h"
来实现此方案,但每当我尝试使用其中一个类时,我都会遇到“模糊”错误。如果我跳过步骤(1)并简单地包括每个类的所有个体头文件,那么我没有那个问题(这就是我编写代码的方式)。
无论如何,我的计划是否可行?有没有办法让它发挥作用?我真正想要的是有一种方法将每个自定义对象放在一个命名空间中。我想我可以通过简单地将所有类声明放入一个文件来完成这项工作,但这会使entity.h膨胀。
我搜索过关键字“前向声明”,“C ++”,“命名空间”,“一个命名空间”,“主标题”,“标题”,找不到任何相关的内容。也许我想做的是错的?
答案 0 :(得分:2)
另一种方法是将类直接从原始标题包装到命名空间中,然后包括它们,例如:
A.H:
namespace SomeNameSpace {
class A{
// Class definition
void something();
}
}
A.cpp:
#include "A.h"
namespace SomeNameSpace {
void A::something()
{
}
// And other function definitions
}
entity.h:
#include "A.h"
#include "B.h"
// And so on...
答案 1 :(得分:2)
你不能使用“A级”;在你的entity.h中,因为这意味着你实际上是在宣布一个班级,但你已经在A.h中完成了 您可以在entity.h中添加整个声明,但不能使用任何A.h,B.h等。 或者,您可以在每个* .h文件中使用相同的命名空间: A.h - > namespace SomeNamespace { A级...... }
B.h - > namespace SomeNamespace { B级...... }
答案 2 :(得分:1)
您不能在没有完整定义的范围内使用类(前向声明是不够的)。通常你可以在标题中转发声明,在cpp中转发#include。我没有看到组织你想要的方式的重点;规范的智慧是尽可能转发声明,并在必要时进行#include。