我正在开发一个不属于我自己的代码库,它具有以下布局:
object.h:
// Objects are defined
// #include "tickets.h" (functions to access the objects)
// An access-handler object is defined
我想介绍一个知道对象的类,可以从tickets.h中的函数访问,但也可以使用access-handler对象。函数是分开的,即在tickets.h中调用的类函数不使用访问处理程序(如果不是这样的话,我不知道从哪里开始)。
因此我的类需要在tickets.h之前定义,但是它的一些函数需要在access-handler之后定义。有没有办法做到这一点,而不将它分成两个头文件,如下所示:
// Objects are defined
// -- include declaration of class, and definition of functions that tickets.h needs
// #include "tickets.h"
// An access-handler object is defined
// -- include functions of class that need the access-handler
这似乎非常混乱,将这样的事情分成两个单独的文件,我希望保留所有内容。
感谢您的帮助,我显然对c ++中的声明/定义只有非常基本的理解。
编辑:如果我使用前向声明并在tickets.h之前包含它(在mynewclass.h中声明的类和在mynewclass.cc中定义的函数)将mynewclass.cc能够使用包含之后声明的对象of mynewclass.h?即访问处理程序对象。
EDIT2:这样的事情:
object.h:
class obj { // definition }
#include "tickets.h"
class obj_handler {
public void handle { // code }
}
tickets.h:
void do_something(obj o){
communicator.foo();
}
我的对象(传播者):
class communicator {
public:
void foo() { // code }
void bar() { // use handle() from obj_handler }
}
正如您所看到的,我的通信器需要在tickets.h中使用,但在obj_handler之后才能定义。那我应该把它包括在哪里呢?
答案 0 :(得分:2)
如果我正确理解您的问题 - 您可以使用前向声明来解决此问题。这将允许您在定义它的方法之前声明一些类。例如:
// this is forward declaration of class A, no definition provided
class A;
class B
{
// uses A
A * a_;
};
// class A definition
class A
{
// may use class B now
B * b_;
};