解决包含排序问题

时间:2013-07-27 16:04:12

标签: c++

我正在开发一个不属于我自己的代码库,它具有以下布局:

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之后才能定义。那我应该把它包括在哪里呢?

1 个答案:

答案 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_;
};